Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [xpath] pobranie węzła którego dzieci mają konkretny atrybut
Forum PHP.pl > Forum > XML, AJAX > XML
joshrob
Witam,

stawiam pierwsze kroki w XPath; proszę o pomoc lub podanie URL do tutorialu z dużą ilością przykładów, gdyż suche dokumentacje typu http://www.w3.org/TR/xpath do mnie nie przemawiają niestety.

Mam taką strukturę XML:

  1. <root>
  2. <parentnode>
  3. <payload>wanted node value</payload>
  4. <childnode attr="value">ignored child value</childnode>
  5. </parentnode>
  6.  
  7. <parentnode>
  8. <payload>unwanted node value</payload>
  9. <childnode>ignored child value with no attr</childnode>
  10. </parentnode>
  11.  
  12. <parentnode>
  13. <payload>wanted node value</payload>
  14. <childnode attr="value">ignored child value</childnode>
  15. </parentnode>
  16.  
  17. <parentnode>
  18. <payload>unwanted node value</payload>
  19. <childnode attr="unwantedvalue">ignored child value</childnode>
  20. </parentnode>
  21.  
  22. </root>


Jakie zapytanie xpath zwróci payload węzłów parentnode których wartość atrybutu attr dziecka childnode wynosi value?

//root/parentnode[contains(child::childnode[@attr = "value"])] ?

Pozdrawiam,
J.
Whisller
Co prawda XPath dopiero co poznaję ale Twój problem rozwiązałem w ten sposób.

// Edit - zmieniłem trochę $query oraz kod odczytujący

  1. <?php
  2. $dom = new DOMDocument();
  3. $dom->load('f.xml');
  4.  
  5. $xpath = new DOMXPath($dom);
  6.  
  7. $query = "//root/parentnode/childnode[attribute::attr='value']/../payload";
  8.  
  9. $nodes = $xpath->query($query);
  10.  
  11. foreach( $nodes as $node ) {
  12.  echo $node->nodeValue;
  13. }
  14.  
  15. ?>
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.