1

ソースがこのように見える XSLT を使用しています。

ソース:

        <Data>
             <AB>all</AB>
             <AB>all2</AB>
             <CD>hhhhhh</CD>
             <DE>hhhshhh</DE>                
        </Data>

次のように出力を取得するには、XSLT を記述する必要があります。

   <Info>
        <XXX>
        <TTT value="all"/>
        <TTT value="all2"/>
        </XXX>
    <!--    ....-->
    <!--    ..to het all the elements..   -->

   </Info>

タグに一致するように xslt を記述する必要があります。

    <xsl:template match="AB">


    </xsl:template>

Dataタグを一致させることでできます。

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" indent="yes"/>

         <xsl:template match="Data">
        <info>
          <XXX>
          <xsl:for-each select="AB">
          <TTT>
          <xsl:attribute name="value">
            <xsl:value-of select="."/>
          </xsl:attribute>
          </TTT>
          </xsl:for-each>
          </XXX>
        </info>
          </xsl:template>

    </xsl:stylesheet>

ABタグを一致させることでそれを行う方法を教えてもらえますか

    <xsl:template match="AB">


    </xsl:template>

ありがとうございました。

4

1 に答える 1

0

xsl:apply-templates の使用方法を尋ねていると思います。その場合、XSLT は次のようになります。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="Data">
      <info>
         <XXX>
            <xsl:apply-templates select="AB"/>
         </XXX>
      </info>
   </xsl:template>

   <xsl:template match="AB">
      <TTT value="{.}"/>
   </xsl:template>
</xsl:stylesheet>

XSLT を簡素化するために、 ABテンプレートで属性値テンプレートを使用していることにも注意してください。

他の非 AB 要素も変更せずに出力する必要がある場合は、XSLT で恒等変換を利用します。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="Data">
      <info>
         <XXX>
            <xsl:apply-templates select="AB"/>
         </XXX>
         <xsl:apply-templates select="node()[not(self::AB)]" />
      </info>
   </xsl:template>
   <xsl:template match="AB">
      <TTT value="{.}"/>
   </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>   
</xsl:stylesheet>

これは、XXX 要素の後に出力する、AB 以外のすべての要素にも一致します。あなたの場合、次のように出力されます。

<info>
   <XXX>
      <TTT value="all" />
      <TTT value="all2" />
    </XXX>
    <CD>hhhhhh</CD>
    <DE>hhhshhh</DE>
</info>

もちろん、CD や DE などの要素に一致する他のテンプレートを使用してそれらを変換できない理由はありません。

于 2012-05-31T06:30:07.910 に答える