1

入力xmlがあります。たとえば、次のようにします。

<myxml>
    <myelement id="1" />
    <myelement id="2" />
    <myelement id="3" />
</myxml>

別の形式の出力 xml を作成する XSLT を作成したいと思います。たとえば、次のようにします。

<theirxml>
    <theirelement id="1" />
    <theirelement id="2" />
    <theirelement id="3" />
</theirxml>

タグ内にタグを含む xslt を作成できないため (たとえば、"<theirelement id="<xslt:...>" >" のようなもの)、次のように CDATA を使用してそれを行う方法を見つけました (提示されているのは関連部分のみです)。 xslt の):

<xsl:for-each select="myxml/myelement">
    <xsl:text><![CDATA[<theirelement id="]]></xsl:text><xsl:value-of select="@name" /><xsl:text><![CDATA[" />]]></xsl:text>
</xsl:for-each>

ただし、生成された出力には「<theirelement ...」ではなく「<theirelement ...」が含まれます。出力に実際に「<」ではなく「<」を含める必要があります。(「>」と「>」も同様)。

その理由は、このプロセスからの出力が、タグが「<tag>」としてエスケープされている場合に xml の読み取りに失敗する一部のプログラムの入力であるためです。

どんな助けでも大歓迎です!

4

2 に答える 2

2

目的の変換を行うスタイルシートを次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output encoding="utf-8" method="xml"/>

    <xsl:template match="/">
        <myxml>
            <xsl:apply-templates/>
        </myxml>
    </xsl:template>

    <xsl:template match="myelement">
        <theirelement>
            <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
        </theirelement>
    </xsl:template>

</xsl:stylesheet>
于 2013-08-26T13:52:22.720 に答える
1

@ fred02138 のソリューションは次のように簡略化できます。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output encoding="utf-8" method="xml"/>

    <xsl:template match="/">
        <myxml>
            <xsl:apply-templates/>
        </myxml>
    </xsl:template>

    <xsl:template match="myelement">
        <theirelement id="{@id}"/>
    </xsl:template>

</xsl:stylesheet>

中括弧で囲まれた構造は、XSLT 参照で検索する場合の「属性値テンプレート」です。

于 2013-08-26T15:36:41.753 に答える