xpath查找节点是否存在

使用xpath查询如何查找节点(标签)是否存在?

例如,如果我需要确保网站页面具有正确的基本结构,如/ html / body和/ html / head / title

<xsl:if test="xpath-expression">...</xsl:if> 

所以例如

 <xsl:if test="/html/body">body node exists</xsl:if> <xsl:if test="not(/html/body)">body node missing</xsl:if> 

尝试以下expression式: boolean(path-to-node)

Patrick是正确的,无论是在使用xsl:if ,还是在用于检查节点存在的语法中。 然而,正如Patrick的回答所暗示的那样,没有xsl等同于if-then-else,所以如果你正在寻找更像if-then-else的东西,那么通常使用xsl:choosexsl:otherwise会更好。 所以,帕特里克的例子语法将工作,但这是一个替代:

 <xsl:choose> <xsl:when test="/html/body">body node exists</xsl:when> <xsl:otherwise>body node missing</xsl:otherwise> </xsl:choose> 

(编辑至less6个字符)

使用select可能会更好,不必一次input(或可能错误input)expression式,并允许您遵循其他不同的行为。

我经常使用count(/html/body) = 0 ,因为具体的节点数量比集合更有趣。 例如…当意外地有超过1个节点匹配你的expression。

 <xsl:choose> <xsl:when test="/html/body"> <!-- Found the node(s) --> </xsl:when> <!-- more xsl:when here, if needed --> <xsl:otherwise> <!-- No node exists --> </xsl:otherwise> </xsl:choose> 

我在Ruby中工作,使用Nokogiri我获取元素,并看看结果是否为零。

 require 'nokogiri' url = "http://somthing.com/resource" resp = Nokogiri::XML(open(url)) first_name = resp.xpath("/movies/actors/actor[1]/first-name") puts "first-name not found" if first_name.nil? 

使用count()在Java中使用xpath时的变体:

 int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc)); if( numberofbodies==0) { // body node missing }