输入xml元素的文本值作为最终xslt输出

时间:2014-01-20 05:01:41

标签: xslt xslt-1.0

我有一个场景,其中输入(源)xml有一个元素,其中包含一个有效的格式良好的xml作为字符串。我正在尝试编写一个xslt,它将为我提供包含有效负载xml的所需元素的文本值。实质上,输出应该只是包含它的元素的文本。这是我正在尝试的,我在这里遗漏了一些明显的东西。我正在使用xslt 1.0 感谢。

输入xml:

    <BatchOrders xmlns="http://Microsoft.ABCD.OracleDB/STMT">
    <BatchOrdersRECORD>
        <BatchOrdersRECORD>
            <ActualPayload>
                &lt;PersonName&gt;
                &lt;PersonGivenName&gt;CaptainJack&lt;/PersonGivenName&gt;
                &lt;PersonMiddleName&gt;Walter&lt;/PersonMiddleName&gt;
                &lt;PersonSurName&gt;Sparrow&lt;/PersonSurName&gt;
                &lt;PersonNameSuffixText&gt;Sr.&lt;/PersonNameSuffixText&gt;
                &lt;/PersonName&gt;
            </ActualPayload>
        </BatchOrdersRECORD>
    </BatchOrdersRECORD>
</BatchOrders>

Xslt:

    <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="text()|@*" name="sourcecopy" mode="xml-to-string">
        <xsl:value-of select="*"/>
    </xsl:template>
    <xsl:template name="xml-to-string-called-template">
        <xsl:param name ="param1">
            <xsl:element name ="DestPayload">
                <xsl:text disable-output-escaping ="yes">&lt;![CDATA[</xsl:text>
                <xsl:call-template name ="sourcecopy"/>
                <xsl:text disable-output-escaping ="yes">]]&gt;</xsl:text>
            </xsl:element>
        </xsl:param>
    </xsl:template>

</xsl:stylesheet>

期望的输出:

 <PersonName>
    <PersonGivenName>CaptainJack</PersonGivenName>
    <PersonMiddleName>Walter</PersonMiddleName>
    <PersonSurName>Sparrow</PersonSurName>
    <PersonNameSuffixText>Sr.</PersonNameSuffixText>
</PersonName>

1 个答案:

答案 0 :(得分:0)

你真的需要mode="xml-to-string"吗?

更改

<xsl:template match="text()|@*" name="sourcecopy" mode="xml-to-string">
    <xsl:value-of select="*"/>
</xsl:template>

<xsl:template match="text()|@*" name="sourcecopy">
    <xsl:value-of select="." disable-output-escaping ="yes"/>
</xsl:template>

这个模板会满足吗?