0

我想使用 xslt 从给定的 xml 获取输出 xml。输出 xml 将在给定的 xml 中添加一些元素。但我没有得到所需的输出。

我有一个输入xml,如:

  <Response xmlns="http://xyz.abc/max/"  xmlns:ns1="http://xyz.abc/max/">
    <out xmlns="">
        <Number xmlns="http://xyz.abc/max/">Desc1</Number>
        <Address xmlns="http://xyz.abc/max">Desc2</Address>
        <Records xmlns="http://xyz.abc/max">Desc3</Records>
    </out>
</Response>

我想要一个输出xml,如:

<?xml version="1.0" encoding="UTF-8"?>
<abc:Reqeust xmlns:abc="http://www.nnn.com/bnm"
xmlns:ns1="http://xyz.abc/max/" xmlns="http://xyz.abc/max/" >
    <abc:Tray>
        <abc:Remote>
            <abc:ID>ID1</abc:ID>
            <abc:Distance>Always</abc:Distance>
        </abc:Remote>
        <abc:Time>
            1100-01-01T01:01:01+05:30
        </abc:Time>
        <abc:AreaMap />
    </abc:Tray>
    <abc:Area>
        <abc:Get>
            <abc:Fault>Token1</abc:Fault>
        </abc:Get>
        <Response xmlns="http://xyz.abc/max/"  xmlns:ns1="http://xyz.abc/max/">
            <out xmlns="">
                <Number xmlns="http://xyz.abc/max/">Desc1</Number>
                <Address xmlns="http://xyz.abc/max">Desc2</Address>
                <Records xmlns="http://xyz.abc/max">Desc3</Records>
            </out>
        </Response>
    </abc:Area>
</abc:Reqeust>

我正在使用 xslt:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:abc="http://www.nnn.com/bnm"
xmlns:ns1="http://xyz.abc/max/" xmlns="http://xyz.abc/max/" >
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Response">
        <abc:Request>
            <abc:Tray>
                <abc:Remote>
                    <abc:ID>ID1</abc:ID>
                    <abc:Distance>Always</abc:Distance>
                </abc:Remote>
                <abc:Time>
                    1100-01-01T01:01:01+05:30
                </abc:Time>
                <abc:AreaMap />
            </abc:Tray>
            <abc:Area>
                <abc:Get>
                    <abc:Fault>Token1</abc:Fault>
                </abc:Get>
                <Response>
                    <xsl:apply-templates select="@*|node()"/>
                </Response>
            </abc:Area>
        </abc:Request>
    </xsl:template>
</xsl:stylesheet>

但我没有得到所需的输出。我应该在 xslt 中进行哪些更改以获得所需的输出 xml?

4

1 回答 1

0

在 xslt-1.0 中,您必须始终使用名称空间前缀来访问属于名称空间的名称。
输入 XML 中的Response元素属于默认命名空间xmlns="http://xyz.abc/max/"
您已经将此命名空间添加为xmlns:ns1="http://xyz.abc/max/.

因此,更改您的响应表单模板:

<xsl:template match="Response">

至:

<xsl:template match="ns1:Response">

这将生成以下输出:

<?xml version="1.0"?>
<abc:Request xmlns:abc="http://www.nnn.com/bnm" xmlns:ns1="http://xyz.abc/max/" xmlns="http://xyz.abc/max/">
    <abc:Tray>
        <abc:Remote>
            <abc:ID>ID1</abc:ID>
            <abc:Distance>Always</abc:Distance>
        </abc:Remote>
        <abc:Time>
            1100-01-01T01:01:01+05:30
        </abc:Time>
        <abc:AreaMap/>
    </abc:Tray>
    <abc:Area>
        <abc:Get>
            <abc:Fault>Token1</abc:Fault>
        </abc:Get>
        <Response>
            <out xmlns="">
                <Number xmlns="http://xyz.abc/max/">Desc1</Number>
                <Address xmlns="http://xyz.abc/max">Desc2</Address>
                <Records xmlns="http://xyz.abc/max">Desc3</Records>
            </out>
        </Response>
    </abc:Area>
</abc:Request>
于 2013-06-04T15:16:54.790 回答