1

次の形式のxmlファイルがあります

<root>
<entities>
    <entity>
        <entity_name></entity_name>
        <entity_id></entity_id>
    </entity>
    <entity>
        <entity_name></entity_name>
        <entity_id></entity_id>
    </entity>
    <entity>
        <entity_name></entity_name>
        <entity_id></entity_id>
    </entity>
</entities>

xsltを使用して次のxml形式に変換しようとしています。

<root>
 <entity_name></entity_name>
 <entity_id></entity_id>

 <entity_name></entity_name>
 <entity_id></entity_id>

 <entity_name></entity_name>
 <entity_id></entity_id>

私は XSLT を初めて使用し、何時間も解決策を見つけようとしています。親切に提案してください。XSLT を学ぶための良い参考文献をいくつか入手できれば、本当に感謝しています。

4

1 に答える 1

1

これは、標準の XSLT Identity Transform に基づいて構築することで実現できます。

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

それ自体では、すべての要素をそのままコピーするだけです。そのため、エンティティエンティティ要素に一致する追加のテンプレートを追加する必要がありますが、要素自体を実際にコピーせずに子を出力するだけです。

次の XSLT を試してください

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

   <xsl:template match="entities|entity">
         <xsl:apply-templates />
   </xsl:template>

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

以下の XSLT に適用する場合

<root>
   <entities>
      <entity>
         <entity_name/>
         <entity_id/>
      </entity>
      <entity>
         <entity_name/>
         <entity_id/>
      </entity>
      <entity>
         <entity_name/>
         <entity_id/>
      </entity>
   </entities>
</root>

以下が出力されます

<root>
   <entity_name></entity_name>
   <entity_id></entity_id>
   <entity_name></entity_name>
   <entity_id></entity_id>
   <entity_name></entity_name>
   <entity_id></entity_id>
</root>
于 2012-11-26T10:44:12.600 に答える