Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] [xpath], dom + xpath
zbinior
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 28.05.2007

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
marast78
post
Post #2





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 30.11.2004

Ostrzeżenie: (0%)
-----


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ę
Go to the top of the page
+Quote Post
abc667
post
Post #3





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
marast78
post
Post #4





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 30.11.2004

Ostrzeżenie: (0%)
-----


zgadza się podał moje przeoczenie..sorki, przejrzę to jak znajdę czas po pracy (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował marast78 27.06.2007, 09:14:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:01