<?php $dom=new domdocument(); $f=$dom->createdocumentfragment(); $f->appendxml('<p id="a">test</p><span>test</span>'); $xpath = new DOMXPath($dom); $result=$xpath->query('.//*', $f); foreach($result as $tag){ } ?>
Jednakże, gdy próbuję dobrać się do elementów, których id="a" spotyka mnie zawód:
<?php $dom=new domdocument(); $f=$dom->createdocumentfragment(); $f->appendxml('<p id="a">test</p><span id="a">test</span>'); $xpath = new DOMXPath($dom); $result=$xpath->query('.//*[@id="a"]', $f); foreach($result as $tag){ } ?>
Skrypt, pomimo moich oczekiwań nie wyświetla napisu p.
Czy jest to jakiś bug php, czy po prostu gdzieś popełniam błąd?
O dziwo, gdy obiekt o id równym a nie jest bezpośrednio dzieckiem #document-fragment - kod działa poprawnie:
<?php $dom=new domdocument(); $f=$dom->createdocumentfragment(); $f->appendxml('<a><p id="a">test</p></a><span id="a">test</span>'); $xpath = new DOMXPath($dom); $result=$xpath->query('.//*[@id="a"]', $f); foreach($result as $tag){ } ?>
Czyli wyświetla p.
Mój problem teoretycznie rozwiązuje takowe zapytanie, jednak nie jestem usatysfakcjonowany takim rozwiązaniem:
<?php $result=$xpath->query('*[@id="a"]|*//*[@id="a"]', $f); ?>
Chciałem przeprosić osoby korzystające równocześnie z forumweb, czyli mojego forum domowego. Niestety na nim nie otrzymałem żadnej odpowiedzi.
Ps. dlaczego przed wszystkie cudzysłowy zostały wstawione znaki \ ? Bynajmniej nie ja jestem ich autorem.