web-dev-qa-db-ja.com

xpathノードが存在するかどうかを調べる

Xpathクエリを使用して、ノード(タグ)がまったく存在しているかどうかをどのように確認しますか?

たとえば、Webサイトのページが/ html/bodyや/ html/head/titleのような正しい基本構造を持っていることを確認する必要がある場合などです。

195
EddyR
<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>
310

次の式を試してください。boolean(path-to-node)

68
annesley

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>
47
gkrogers

選択肢を使用したほうがいいかもしれませんし、表現を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>
13
davenpcj

私は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?
4
bcolfer

Count()を使ってJavaでxpathを使うときのバリエーション:

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