使用XPath查询如何查找节点(标记)是否存在?
例如,如果我需要确保一个网站页面具有正确的基本结构,如/html/body和/html/head/title。
使用XPath查询如何查找节点(标记)是否存在?
例如,如果我需要确保一个网站页面具有正确的基本结构,如/html/body和/html/head/title。
当前回答
Patrick在xsl:if的使用和检查节点是否存在的语法方面都是正确的。然而,正如Patrick的回答所暗示的那样,没有与if-then-else等价的xsl,因此如果您正在寻找更类似于if-then-else的东西,通常最好使用xsl:choose和xsl: else。所以,Patrick的示例语法将工作,但这是一个替代方案:
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
其他回答
Patrick在xsl:if的使用和检查节点是否存在的语法方面都是正确的。然而,正如Patrick的回答所暗示的那样,没有与if-then-else等价的xsl,因此如果您正在寻找更类似于if-then-else的东西,通常最好使用xsl:choose和xsl: else。所以,Patrick的示例语法将工作,但这是一个替代方案:
<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?
在Java中使用count()使用xpath时的一个变体:
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}
试试下面的表达式:boolean(path-to-node)
<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>