属性等于的php xpath get节点
我有一个xml,如何获取属性等于的php xpath get节点,php,Php,我有一个xml,如何获取levelone中的节点,该节点具有名为myatt的属性,其值为a,然后访问它的myval。 我试着引用其他帖子来让它工作,但它似乎不工作我的xpath出了什么问题 $this->myXmlObj->xpath(//levelone[myfield[attributes/myattt='a]]]) 编辑2 XPATH中的属性由@attr语法引用。因此,您可以使用以下xpath检索aa //一级/myfield[@myatt='a']/@myval 这意味着,抓取所有属性m
levelone
中的节点,该节点具有名为myatt
的属性,其值为a
,然后访问它的myval
。
我试着引用其他帖子来让它工作,但它似乎不工作我的xpath出了什么问题
$this->myXmlObj->xpath(//levelone[myfield[attributes/myattt='a]]])代码>
编辑2
XPATH中的属性由@attr
语法引用。因此,您可以使用以下xpath检索aa
//一级/myfield[@myatt='a']/@myval
这意味着,抓取所有属性myatt
等于'a'
的myfield
元素。然后,从这些属性中选择其myval
属性的值。请注意,这可能是多个结果
测试XPATH表达式的一个方便的地方是。skabbes非常感谢它能够匹配节点,但我没有以字符串的形式获取值,我仍然在获取一个结构(请参见编辑1)@user391986,SimpleXML只会从XPATH查询返回元素,不管您是否请求属性、字符串、数字,我明白了,谢谢。那么我应该像edit2那样做,还是有更好的方法来提取值呢?我假设您正在使用,在这种情况下,您需要使用$xpathResult->nodeValue来提取属性。您也可以使用。
<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;