Gå til innhold

XML parsing fra wow armory


Anbefalte innlegg

Okey så jeg har

<?php

$url = "http://armory.wow-europe.com/character-skills.xml?r=Dentarg&n=Kaplii";
$ch = curl_init();
$timeout = 30;
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent);
$data = curl_exec($ch);
curl_close($ch);

$xml = simplexml_load_string($data);

?>

 

Men jeg klarer ikke å forstå hvordan jeg skal få ut infoen. Vil gjerne ha ut name og value fra skill inni skillCategory som har name Professions som er inni skillTab

Har ikke funnet ut hva attribs() gjør men vet den må brukes.

Det må bli $xml->characterInfo->character->skillTab-> osv i en foreach eller noe ahh forstår ingenting @_@

 

Edit: Okey jeg har fått til dette:

foreach($xml->children() as $characterInfo) {

foreach($characterInfo->children() as $character) {

foreach($character->children() as $skillTab) {
//echo $skillTab['key'];
foreach($skillTab->children() as $skillCategory) {
echo $skillCategory["name"] . " ";
echo $skillCategory["value"] . "<br>";	
} } } }

 

Men hvis jeg bare vil ha de 2 første, hva gjør jeg da?

 

Edit2:

Altså XML'en ser sånn ut: http://pastebin.com/m5df9b897

Jeg vil ha name og value fra skill der hvor skillCategory key = "professions"

Endret av Kapli
Lenke til kommentar
Videoannonse
Annonse

hva er output dersom du gjør dette?

<?php

$url = "http://armory.wow-europe.com/character-skills.xml?r=Dentarg&n=Kaplii";
$ch = curl_init();
$timeout = 30;
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent);
$data = curl_exec($ch);
curl_close($ch);

$xml = simplexml_load_string($data);

print_r($xml);

?>

Lenke til kommentar

hva skjer hvis du bytter ut:

print_r($xml);

 

med:

$skills = $xml->xpath('skillCategory[@key="professions"]/skill');

$outString = '';
foreach ($skills as $k => $v) {
$skills[$k] = $v->attributes();
$outString .= $skills[$k]['name'] . ' ' . $skills[$k]['value'] . "<br />\n";

}
print $outString;

Endret av grimjoey
Lenke til kommentar

Warning: Invalid argument supplied for foreach() in /var/www/last-wish/phpbb3/armory.php on line 22

Line 22 er foreach 'en

 

Hvis jeg var_dump($skills); så får jeg

bool(false)

Endret av Kapli
Lenke til kommentar

oops. xpath tar vist nok ikke med attributter uansett.. ref php.net

 

function searchXMLAttributes($attribute, $value, $object) {
if (method_exists($object, 'attributes')) {
	$attributes = $object->attributes();

}
if (isset($attributes)) {
	foreach ($attributes as $k = $v) {
		if (!strcmp($k, $attribute)) {
			if (!strcmp($v, $value)) return $object;

		}

	}

}
foreach ($object as $o) {
	return searchXMLAttribute($attribute, $value, $o);

}

}

$skills = searchXMLAttributes('key', 'profession', $xml);
print_r($skills);

Endret av grimjoey
Lenke til kommentar

Fortsatt ingenting, men jeg trodde xpath var når du skal ha det som ligger inni, altså ikke attributene

Edit: Googla xpath, prøvde med

$skills = $xml->xpath('/characterInfo/skillTab/skillCategory[@key=professions]/skill');

 

Forsatt ingenting :S

EDIT: JO JO det funket hvis jeg fjernet / helt på starten så det ble

$skills = $xml->xpath('characterInfo/skillTab/skillCategory[@key=professions]/skill');

 

ok nå må jeg bare teste dette med masse annet :D:D jeg skal reporte tilbake soonish ;)

tusen takk for hjelpen btw

Endret av Kapli
Lenke til kommentar

årsaken er at xml'en har en <page> i rota. så det ikke med en gang på grunn av manglende crlf etter <?xml...?> taggen

 

så dette bør også fungere:

 

$xml->xpath('/page/characterInfo/skillTab/skillCategory[@key="professions"]/skill');

Endret av grimjoey
Lenke til kommentar

Okey jeg har et lite problem.

Her er XML'en

http://pastebin.com/f4b4d120c

Her er koden:

http://pastebin.com/m1bd4dfb3

 

$talent1 er 0

$talent2 er 31 og

$talent3 er 8

 

Jeg må finne det største av de 3 tallene, jeg prøver å gjøre det med max() , men det fungerer ikke fordi de ikke er integers, hvis jeg var_dump() en av dem så ser jeg at de er strings fra objektet. Og jeg kan jo ikke gjøre de om til integer med en (int) foran.

Så spørsmålet er hvordan skal jeg få gjort de om til integers?

Lenke til kommentar

Åh jeg er så dum, når jeg prøvde det før jeg postet så fikk jeg int(0) med var_dump.

Og jeg trodde da at det ikke fungerte, men det var jo helt riktig siden tallet var jo 0 hehe.

Takk for hjelpen igjen :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...