Xpathクエリを使用して、ノード(タグ)がまったく存在しているかどうかをどのように確認しますか?
たとえば、Webサイトのページが/ 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:if
の使用とノードの存在をチェックするための構文の両方において、Patrickは正しいです。ただし、Patrickの回答が暗示しているように、if-then-elseに相当するxslはありません。したがって、if-then-elseのようなものを探しているのであれば、通常は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>
選択肢を使用したほうがいいかもしれませんし、表現を2回以上タイプしたり(またはタイプミスをしたりする必要はありません)、他のさまざまな動作に従うことができます。
特定のノード数がセットよりも興味深いので、私は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
}