У меня есть 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 .