XPathクエリを使用して、ノード(タグ)が存在するかどうかをどのように見つけますか?
たとえば、ウェブサイトのページが/html/bodyとのような正しい基本構造を持っていることを確認する必要がある場合/html/head/titleです。
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>
次の式を試してください。boolean(path-to-node)
xsl:ifPatrickは、の使用とノードの存在をチェックするための構文の両方で正しいです。ただし、Patrickの応答が示すように、if-then-elseに相当するxslはありません。したがって、if-then-elseのようなものを探している場合は、通常、xsl:chooseとを使用することをお勧めしますxsl:otherwise。したがって、Patrickの構文例は機能しますが、これは代替手段です。
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
選択肢を使用する方がよい場合があります。式を複数回入力する(または入力を間違える)必要がなく、追加のさまざまな動作に従うことができます。
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>
私は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?
count()を使用してJavaでxpathを使用する場合のバリエーション:
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}