[php/xml/xpath] attribuut zoeken en selecteren.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Creesch
  • Registratie: Februari 2002
  • Laatst online: 22:46
Voor een php script heb ik de data nodig van een xml bestand dat door een andere partij word aangeboden.
Specifiek ik wil van een attribute subchild van een element met een specifiek attribute uitlezen.

Het gaat om http://api.eve-online.com/eve/AllianceList.xml.aspx waar ik van de row met de attribuut allianceID="810859677" alle atributes will hebben met de naam corporationID van subchild row

Nu ben ik niet echt een phper of coder maar met simple xml ben ik op bepaalde punten all vrij ver gekomen. Nu dacht ik voor dit specifieke probleem met xpath dit heel mooi te kunnen selecteren

PHP:
1
2
3
4
5
6
7
8
9
10
 $xmldoc = new DOMDocument();
 $xmldoc->load('http://api.eve-online.com/eve/AllianceList.xml.aspx');

 $xpathvar = new Domxpath($xmldoc);

$alliance = $xpathvar->query("result/rowset/row[@allianceID = '810859677'']/rowset/row[@corporationID]");
foreach($alliance as $corpresult){
  echo $corpresult->textContent;

  }


maar na vele malen de boel aanpassen, googlen, etc krijg ik nog steeds niet de lijst met resultaten (dit zouden 3 cijfreeksen moeten zijn op het moment). Het rare is dat ik geen foutmelding terug krijg met deze query, alleen een lege pagina. Als ik de query aanpas krijg ik wel een melding dat de query niet klopt, dus ik heb het vermoeden dat ik ergens iets toch fout doe , ik kom er alleen niet uit wat :)
Kan iemand mij een zetje in de goede richting geven ?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
craze_ schreef op vrijdag 31 juli 2009 @ 12:15:
code:
1
result/rowset/row[@allianceID = '810859677'']/rowset/row[@corporationID]
Dit zou een path vanaf de root result moeten zijn, enkel in het bestand begint dat met eveapi. Verder zie ik een extra ', die daar denk ik niet hoort. Daarnaast bevat de XML-node een beetje weinig text (als in geen), dus zul je niet zo snel iets zien... :) Misschien dat je row/@corporationID bedoelt, maar ook dan is textContent wat vreemd.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Creesch
  • Registratie: Februari 2002
  • Laatst online: 22:46
PHP:
1
eveapi/result/rowset/row[@allianceID = '810859677']/rowset/row/@corporationID


Dan zou het dus dit moeten zijn ?
Ik moet eerlijk zeggen dat ik de textcontent van een voorbeeld stuk code heb overgenomen, zoals ik heb aangegeven ben ik niet echt een coder of developer dus sommige dingen is voor mij iets meer prutsen en proberen tot het werkt.
Ik wil ook geen text uit de element ik wil de waardes van de rows met de attributes corporationID

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19-09 11:00

Ventieldopje

I'm not your pal, mate!

Hey, ik heb dit al eerder gedaan met meerdere gegevens, dit is dan wel in bash (linux shell script) geschreven maar het principe is het zelfde.

http://www.gnome-look.org...E+Online%29?content=85215

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

//result/rowset/row[@allianceID = '810859677']/rowset/row[@corporationID]

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
craze_ schreef op vrijdag 31 juli 2009 @ 13:21:
code:
1
eveapi/result/rowset/row[@allianceID = '810859677']/rowset/row/@corporationID


Dan zou het dus dit moeten zijn ?
Ja, works for me op bijvoorbeeld http://www.mizar.dk/XPath/Default.aspx, maar probeer het gewoon zelf uit.. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Creesch
  • Registratie: Februari 2002
  • Laatst online: 22:46
pedorus schreef op vrijdag 31 juli 2009 @ 14:04:
[...]

Ja, works for me op bijvoorbeeld http://www.mizar.dk/XPath/Default.aspx, maar probeer het gewoon zelf uit.. :)
Nu ga ik me waarschijnlijk heel dom voelen maargoed, als ik dat stukje rechtstreeks invoer krijg ik de gehele xml file terug. moet ik nog ergens aangeven dat hij een query moet uitvoeren of betekent dit gewoon dat mijn xpath query het niet doet ?

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
craze_ schreef op vrijdag 31 juli 2009 @ 14:15:
[...]


Nu ga ik me waarschijnlijk heel dom voelen maargoed, als ik dat stukje rechtstreeks invoer krijg ik de gehele xml file terug. moet ik nog ergens aangeven dat hij een query moet uitvoeren of betekent dit gewoon dat mijn xpath query het niet doet ?
Het is normaal voor wat kleinere bestanden, dus hij highlight het geselecteerde deel... Dat zijn inderdaad 3 dingetjes, dus lijkt me goed gaan.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Creesch
  • Registratie: Februari 2002
  • Laatst online: 22:46
ah dom voelen dus ;)
goed om te weten dat de query klopt. ik probeer nu de data er uit te halen met

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 $xmldoc = new DOMDocument();
 $xmldoc->load('http://api.eve-online.com/eve/AllianceList.xml.aspx');

 $xpathvar = new Domxpath($xmldoc);
 
 $alliancecorpids= array();
 
$alliance = $xpathvar->query("/eveapi/result/rowset/row[@allianceID = '810859677']/rowset/row[@corporationID]");
foreach($alliance as $corpresult){
// debug echo
echo $corpresult->nodeValue ."alliance<br>";

$alliancecorpids[]=$corpresult->nodeValue;

  }
echo("<br>");


Maar de array of de debug echo blijven gewoon leeg, blijkbaar pak ik het helemaal verkeerd aan maar ik kan er maar niet achterkomen wat ik verkeerd doe :/
* Creesch begint zich meer en meer prutser te voelen :+
Terwijl ik toch dacht het nu aardig te snappen ondertussen

edit:
onzin conclusie getrokken en daardoor een halfuur gesleuteld aan code die prima werkte, lap tekst weggehaald :X maar nog steeds geen inhoud in de array :'(

[ Voor 71% gewijzigd door Creesch op 31-07-2009 16:13 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
craze_ schreef op vrijdag 31 juli 2009 @ 15:52:
Maar de array of de debug echo blijven gewoon leeg, blijkbaar pak ik het helemaal verkeerd aan maar ik kan er maar niet achterkomen wat ik verkeerd doe :/
Hm, op de een of andere manier heb je daar ook weer een andere xpath. Evengoed zou je met die code 3x alliance moeten zien, als ik het zelf goed zie. :)
Het kan ook zijn dat je warnings niet zichtbaar hebt, en dat allow_url_fopen uit staat. Dan gaat het op regel 2 al mis, en is er niks geladen. Probeer anders eerst even file_get_contents, echo de inhoud en doe daarna loadXML.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Creesch
  • Registratie: Februari 2002
  • Laatst online: 22:46
ik zie inderdaad 3x alliance staan dat klopt, alleen niet de nummerreeksen die bij corporationID horen.
Ik heb even phpinfo() gedraaid en allow_url_fopen staat gewoon aan.

Wat bedoel je met een andere xpath ?

Acties:
  • 0 Henk 'm!

  • Creesch
  • Registratie: Februari 2002
  • Laatst online: 22:46
je hebt helemaal gelijk! stom moet er ingeslopen zijn toen ik een vorige versie er bij pakte om iets te vergelijken.
Het is nu inderdaad werkende met

PHP:
1
$alliance = $xpathvar->query("/eveapi/result/rowset/row[@allianceID = '810859677']/rowset/row/@corporationID");


bedankt voor je hulp en geduld :D
Pagina: 1