回答:
<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>
html/body and not(html/body/node())
(つまり、存在していて、子ノードやテキストノードが含まれていないかどうかをテストするだけで)質問する必要があります。
次の式を試してください。 boolean(path-to-node)
Patrickは、の使用xsl:if
と、ノードの存在を確認するための構文の両方で正しいです。ただし、Patrickの応答が示すように、if-then-elseに相当するxslはないため、if-then-elseのようなものを探している場合は、通常xsl:choose
、and を使用した方がよいでしょうxsl:otherwise
。したがって、Patrickの構文例は機能しますが、これは代替手段です。
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
if-then-else
、またどうif-else if-else
ですか?davenpcjの答えtest="somexpath"
では、いつ作るのif-else if-else
ですか?
選択肢を使用した方がよい場合があります。式を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>
count(/html/body) = 0
天才!:DI が欠落しているとき(または何でも)/html[count(/body)=0]/someNode
を選択するために使用someNode
/body
/html[count(/body)=0]
何も選択せず、XMLに2つのルートノードはありません。たぶん/html[count(body)=0]
、それは/html[not(body)]
、またはと同じになります/html[not(exists(body))]
。
count()を使用してJavaでxpathを使用する場合のバリエーション:
int numberofbodies = Integer.parseInt((String) xPath.evaluate("count(/html/body)", doc));
if( numberofbodies==0) {
// body node missing
}