15
<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>

返信ありがとうございます。

4

4 に答える 4

28

まず、ここでの用語に注意してください。「ノード」を意味しますか、それとも「要素」を意味しますか。ノードは、要素、コメント、テキスト、または処理命令にすることができます。

とにかく、ここで要素を意味する場合、少なくとも1つの子要素が存在することを確認するには、これを行うことができます(この場合はノード要素に配置されていると仮定します)。

<xsl:if test="*">

あなたのコメントは、「node1」だけがif条件を渡すことができることを示唆しているので、特定の要素の存在を確認するには、これを行います

<xsl:if test="node1">
于 2013-01-21T09:16:44.817 に答える
8

テストしているノードのコンテキストでは、これはノードに子要素があるかどうかをテストするために機能するはずです。

<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>が、おそらくそうではありませんか?

于 2013-01-21T09:16:46.210 に答える
0

質問の言い回しは明確ではありませんが、自分自身が子を持っている子ノード(つまり現在のノードの孫)を処理したいだけだと思います

<xsl:template match="node">
 do stuff for node
  <xsl:apply-templates select="*[*]"/>
</xsl:template>

node1子ノードがあるため、にテンプレートを適用するだけで、にテンプレートを適用しませんnode2

于 2013-01-21T20:55:16.807 に答える
0

ノードに一致する式は真実ですが、何にも一致しない式は偽物であるため、次のようになります。

<xsl:if test="node()">
   ...
</xsl:if>

ただし、質問と「node1のみがif条件を渡すことができる」という暗黙の条件は、この例とは相容れません。両方nodenode1子ノードがあるため、両方ともこのif条件を渡します。

厳密にに制限するにはnode1、テンプレートコンテキストが適切であることを確認するか、問題のノードがdocumentElementではないことを確認する必要があります。

于 2013-01-21T09:23:16.363 に答える