0

所以我有这个:

<Presentation>
  <Info attr1="red" attr2="blah"/>
  <Info attr1="big" attr2="iasjd"/>
  <Info attr1="funky" attr2="asf"/>
  ...
  <Info attr1="damn" attr2"..."/>
</Presentation>

如何检查是否存在值为attr1as的节点funky,即?我可以通过检查代码中返回的字符串是否为空,或者使用countXpath 函数检查它是否返回 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 表达式不起作用,则返回 boolean(false),而不是数组。但就我而言,这不是一个足够安全的检查。

4

2 回答 2

1

xpath()如果 XPath 表达式不起作用,则该函数boolean(false)将返回 a 而不是数组。但就我而言,这不是一个足够安全的检查。

您可以在 PHP 5.3 或更高版本中使用“elvis”运算符(x ?: y,相当于):x ? x : y

$xml->xpath("/Presentation/Info[@attr1 = 'funky']") ?: array()

确保您在所有情况下都获得一个数组(如果表达式匹配某些内容,则为非空,如果不匹配,则为空)。

于 2013-10-28T11:19:16.173 回答
1

不知道你在哪里用XPath。但在XPath其自身内部,可以测试节点是否存在。如果您正在使用XSLT,您总是需要使用 进行测试<xsl:if>,请参阅下一个答案:

XPath将始终返回要查找的节点或空节点。

要获取问题中 XML 的节点,需要以下 XPath:

/Presentation/Info[@attr1 = 'funky']
于 2013-10-28T10:24:46.630 回答