У меня есть xml, как я могу получить узел в levelone , у которого есть атрибут myatt , значение которого равно a а затем доступ к его myval . Я пробовал ссылаться на другие сообщения, чтобы заставить его работать, но он не работает, что не так с моей xpath
$this->myXmlObj->xpath("//levelone[myfield[attributes/myatt='a]]]"));
<myxml> <levelone> <myfield myatt="a" myval="aa" /> <myfield myatt="b" myval="bb" /> </levelone> <leveltwo> <myfield myatt="c" myval="dd" /> <myfield myatt="c" myval="dd" /> </leveltwo> </myxml>
array 0 => object(SimpleXMLElement)[41] public '@attributes' => array 'myval' => string 'a' (length=40)
$myVar = $this->myXmlObj->xpath("//levelone/myfield[@myatt='a']"); $myOutput = ((string)$myVar[0]->attributes()->myVal;
Атрибуты в XPATH ссылаются на синтаксис @attr . Таким образом, вы можете получить aa со следующим xpath
// LevelOne / MyField [@ Майат = 'а'] / @ myval
Это означает, что захватите все элементы myfield , у которых атрибут myatt равен 'a' . Затем из них выберите значение атрибутов myval . Обратите внимание, что это может быть несколько результатов.
Удобное место для тестирования выражений XPATH находится по адресу http://chris.photobooks.com/xml/default.htm .