所以我有这个:
<Presentation>
<Info attr1="red" attr2="blah"/>
<Info attr1="big" attr2="iasjd"/>
<Info attr1="funky" attr2="asf"/>
...
<Info attr1="damn" attr2"..."/>
</Presentation>
如何检查是否存在一个节点,其值为 attr1
作为funky
,即?我可以通过检查代码中返回的字符串是否为空count
或使用 Xpath 函数检查它是否返回 0,但是否有其他函数(或方式)来检查具有该特定属性的某个节点是否存在。一些更优雅的方式?
例:正如我所能得到的情况:
<Presentation>
<Info attr1="red" attr2="blah"/>
<Info attr1="big" attr2="iasjd"/>
...
<Info attr1="damn" attr2"..."/>
</Presentation>
由于我没有属性值funky
节点 - 我在代码中做了一些其他的事情。
更新:
我在PHP中这样做。我需要检查这个 attr1 作为字符串的值是多少。所以首先我想检查是否有一个Info
节点,其中 attr1 值正好是"时髦的"。如果是 - 那么在 PHP 中做一些逻辑。如果没有 - 那么做一些其他的事情(在 PHP 中)。我在 SimpleXMLElement 对象上使用函数 xpath(),所以我得到的结果是一个数组。xpath() 函数是这样创建的,如果 XPath 表达式不起作用,则返回布尔值(false),而不是数组。但就我而言,这不是一个足够安全的检查。
创建
xpath()
函数,因此如果 XPath 表达式不起作用,则返回boolean(false)
,而不是数组。但就我而言,这不是一个足够安全的检查。
您可以在 PHP 5.3 或更高版本中使用 "elvis" 运算符(x ?: y
,相当于 x ? x : y
):
$xml->xpath("/Presentation/Info[@attr1 = 'funky']") ?: array()
以确保在所有情况下都获得数组(如果表达式匹配某些内容,则为非空,如果不匹配,则为空)。
不知道你在哪里使用 XPath
.但是在XPath
本身中,可以测试节点是否存在。如果您使用的是XSLT
则始终需要进行测试,例如使用<xsl:if>
,请参阅下一个答案:
- xpath 查找节点是否存在(2009 年 4 月)
XPath
将始终返回要查找的节点或空节点。
若要获取问题中 XML 的节点,需要以下 XPath:
/Presentation/Info[@attr1 = 'funky']