使用XPath查询如何查找节点(标记)是否存在?
例如,如果我需要确保一个网站页面具有正确的基本结构,如/html/body和/html/head/title。
/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>
在Java中使用count()使用xpath时的一个变体:
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc)); if( numberofbodies==0) { // body node missing }
试试下面的表达式:boolean(path-to-node)
boolean(path-to-node)
使用一个选项可能会更好,不必键入(或可能键入错误)你的表达式不止一次,并允许你遵循其他不同的行为。
我经常使用count(/html/body) = 0,因为具体的节点数量比集合更有趣。例如……当有超过1个节点与表达式匹配时。
count(/html/body) = 0
<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>
Patrick是正确的,无论是在xsl:if的使用上,还是在检查节点存在的语法上。然而,正如Patrick的回答所暗示的那样,没有与if-then-else等价的xsl,因此如果您正在寻找更类似于if-then-else的东西,通常最好使用xsl:choose和xsl:otherwise。所以,Patrick的示例语法将工作,但这是一个替代方案:
xsl:if
xsl:choose
xsl:otherwise
<xsl:choose> <xsl:when test="/html/body">body node exists</xsl:when> <xsl:otherwise>body node missing</xsl:otherwise> </xsl:choose>
我在Ruby中工作,使用Nokogiri我获取元素,看看结果是否为nil。
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?