1

これは難しいことではありませんが、XSL のドキュメントは、次の点が関係しているため、特に親切ではありません。

次のようなタグを持つドキュメントを変換しようとしています:

<Region>string</Region>
<Region class="unknown">string</Region>

私はすでに前者のケースを

<xsl:for-each select="region">
<tags>
</xsl:for-each>

ただし、class="unknown" 条件には if-else 構文が必要です。

これを処理する方法の初心者の例を提供していただけませんか?

ありがとう!

4

2 に答える 2

3

xsl:for-eachxsl:ifまたはxsl:chooseを使用する代わりに、代わりにxsl:apply-templatesでテンプレート マッチングを使用する方法もあります。

<xsl:apply-templates select="Region" />

次に、領域要素に一致する (少なくとも) 2 つの個別のテンプレートがあります。

<xsl:template match="Region[@class='unknown']">
    <!-- Do something -->
</xsl:template>

<xsl:template match="Region">
    <!-- Do something else -->
</xsl:template>

この場合、XSLT プロセッサは常により具体的なテンプレート (@class 属性のチェックを含むもの) を最初に照合する必要があるため、2 番目のテンプレートはそのような属性を持たない領域要素のみに一致することに注意してください。

于 2013-01-12T22:58:15.160 に答える
0

XSLTのif-elseの最も簡単なアナログは、select-when-otherwiseによって提供されます。

<xsl:choose>
    <!-- if -->
    <xsl:when test="@class= 'knownClass'">
       <!-- Do something -->
    </xsl:when>

    <!-- else if -->
    <xsl:when test="@class= 'unknown'">
       <!-- Do something else -->
    </xsl:when>

    <!-- else -->
    <xsl:otherwise>
       <!-- Default case -->
    </xsl:otherwise>
</xsl:choose>

if-elseステートメントと同様に、an<xsl:choose>は1つ以上<xsl:when>のsを持つことができ、<xsl:otherwise>はオプションです。

あなたの場合、これを:の中に置くことができます<xsl:for-each>

<xsl:for-each select="region">
   <xsl:choose>
       ...
   </xsl:choose>
</xsl:for-each>
于 2013-01-12T21:55:50.100 に答える