<node>
<node1><node11/></node1>
<node2/>
</node>
XSLTで確認したい
<xsl:if test="If at least 1 child node exists">
Only node1 can pass the if condition
</xsl:if>
返信ありがとうございます。
まず、ここでの用語に注意してください。「ノード」を意味しますか、それとも「要素」を意味しますか。ノードは、要素、コメント、テキスト、または処理命令にすることができます。
とにかく、ここで要素を意味する場合、少なくとも1つの子要素が存在することを確認するには、これを行うことができます(この場合はノード要素に配置されていると仮定します)。
<xsl:if test="*">
あなたのコメントは、「node1」だけがif条件を渡すことができることを示唆しているので、特定の要素の存在を確認するには、これを行います
<xsl:if test="node1">
テストしているノードのコンテキストでは、これはノードに子要素があるかどうかをテストするために機能するはずです。
<xsl:if test="*">
Only node1 can pass the if condition
</xsl:if>
実際にノード(テキストノードを含む)を意味する場合、これはテキストノードを含むように機能します。
<xsl:if test="node()">
Only node1 can pass the if condition
</xsl:if>
しかし、<node>
このテストにも合格します(合格し<node2>
ません)。私はあなたがの子ノードのコンテキストでのみ話していると仮定しました<node>
が、おそらくそうではありませんか?
質問の言い回しは明確ではありませんが、自分自身が子を持っている子ノード(つまり現在のノードの孫)を処理したいだけだと思います
<xsl:template match="node">
do stuff for node
<xsl:apply-templates select="*[*]"/>
</xsl:template>
node1
子ノードがあるため、にテンプレートを適用するだけで、にテンプレートを適用しませんnode2
。
ノードに一致する式は真実ですが、何にも一致しない式は偽物であるため、次のようになります。
<xsl:if test="node()">
...
</xsl:if>
ただし、質問と「node1のみがif条件を渡すことができる」という暗黙の条件は、この例とは相容れません。両方node
にnode1
子ノードがあるため、両方ともこのif条件を渡します。
厳密にに制限するにはnode1
、テンプレートコンテキストが適切であることを確認するか、問題のノードがdocumentElementではないことを確認する必要があります。