Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [xpath]
Forum PHP.pl > Forum > PHP
zbinior
Witam!

Zacząłem robić projekt wymagający zassania XMLa do tablic. Całkiem sprawnie idzie to przy użyciu DOM w php 5 ale nie moge sobie poradzić przy bardziej złożonym XMLu. Poniżej przykład (istotne może być zobaczenie XMLa spod linku) z ktorego probuje wyciągnąć dane z tagu <prf:OutputCharSet>, niestety nie udaje mi sie zawsze zwraca pustą tablice, czy ktoś może mi pomoc?

  1. <?php
  2. $doc = new DOMDocument();
  3. $doc->preserveWhiteSpace = false;
  4. $doc->load('http://wap.sonyericsson.com/UAprof/K800iR101.xml'); 
  5.  
  6. $objXpath = new DOMXpath($doc);
  7. $strXpath = '//OutputCharSet';
  8. $objNodeList = $objXpath->query($strXpath);
  9.  
  10. foreach ($objNodeList as $objNode){
  11. echo $objNode->nodeValue."<br>";
  12. }
  13. ?>
marast78
wg mnie o wiele wydajniejszy i lepszy jest SimpleXML, poza tym jak mamy ci pomóc jak nie widzimy struktury XML, poza tym użyty jest namespace w tym tagu weź to też pod uwagę
abc667
Cytat
poza tym jak mamy ci pomóc jak nie widzimy struktury XML

przecież podał linka, w kodzie

zbinior, nie możesz użyć simplexml, tak jak powiedział marast78 ?
marast78
zgadza się podał moje przeoczenie..sorki, przejrzę to jak znajdę czas po pracy winksmiley.jpg

za pomocą simpleXL (to co nie napisałeś nie działa, głównie dlatego, że użyto w xml namespaces i do tego poprzeplatene, więc musisz iść po drzewie w ten sposób bądź uzyć preg i regexp smile.gif, ale po to jest xml i parsery, żeby ich używać.. ):

  1. <?php
  2. $_file = file_get_contents('http://wap.sonyericsson.com/UAprof/K800iR101.xml');
  3. $xml = simplexml_load_string($_file); 
  4. //<rdf:Description rdf:ID="Profile">
  5. $ns = $xml->getNamespaces(true);
  6. $rdf = $xml->children($ns['rdf']);
  7. $rdf = $rdf->Description;
  8. //<prf:component>
  9. $ns = $rdf->getNamespaces(true);
  10. $prf = $rdf->children($ns['prf']);
  11. //rdf:Description rdf:ID="HardwarePlatform">
  12. $ns = $prf->getNamespaces(true);
  13. $rdf = $prf->children($ns['rdf']);  
  14. //<prf:OutputCharSet>
  15. $ns = $rdf->getNamespaces(true);
  16. $prf = $rdf->children($ns['prf']);
  17. $res = $prf->OutputCharSet;
  18. //<rdf:Bag>
  19. $ns = $res->getNamespaces(true);
  20. $rdf = $res->children($ns['rdf']);  
  21. $res = $rdf->Bag->li;
  22.  
  23. foreach($res as $value)
  24. $_res[] = $value;
  25. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.