将整个源xml插入属性值

时间:2014-06-25 11:48:24

标签: xml xslt

来源xml

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <B>b</B>
    <C>c</C>
</ROOT>

我需要结果xml看起来像(属性文件的值应该包含整个源xml):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RD801>
    <C801 code="b" file="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?    &gt;&#xA;&lt;**ROOT**&gt;&#xA; &lt;B&gt;b&lt;/B&gt;&#xA; &lt;C&gt;c&lt;/C;&#xA;&lt;/ROOT&gt;"/>
</RD801>

有没有人可以帮我构建合适的xslt文件,将源xml转换为生成的xml文件。我会很高兴 主要问题是将整个源xml插入属性值。我需要序列化吗?

1 个答案:

答案 0 :(得分:1)

如果源XML没有属性,则可以使用此样式表:

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

    <xsl:output indent="yes"/>

    <xsl:template match="*">
        <xsl:text>&lt;</xsl:text>
        <xsl:value-of select="name()"/>
        <xsl:text>&gt;</xsl:text>
        <xsl:apply-templates select="node()"/>
        <xsl:text>&lt;/</xsl:text>
        <xsl:value-of select="name()"/>
        <xsl:text>&gt;</xsl:text>
    </xsl:template>

    <xsl:template match="/">

        <xsl:variable name="data">
            <xsl:apply-templates/>
        </xsl:variable>

        <RD801>
            <C801 code="b">
                <xsl:attribute name="file">
                    <xsl:text>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#xA;</xsl:text>
                    <xsl:copy-of select="$data" />
                </xsl:attribute>
            </C801>
        </RD801>

    </xsl:template>

</xsl:stylesheet>

如果您的来源包含属性,注释,处理说明等,则必须编写模板来处理它们。您可以使用上面的样式表作为起点。

这是working example