使用XSLT重命名和从XML中删除标签

时间:2018-08-08 15:39:05

标签: xml xslt rename

我正在尝试重命名和删除单个XSLT代码中的某些字段,但是以某种方式重命名选项不起作用。 以下是我的带有SOAP标记的XML数据,需要删除这些标记并将其替换为所需的名称空间。我应该同时更改XML标记的名称,因为应更改源xml的特定名称。

谢谢

我的源XML

nm

目标输出XML应该是:

ld -r

下面是我尝试过的XSLT:

    <?xml version='1.0' encoding='utf-8'?>
    <soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
        <soapenv:Header/>
        <soapenv:Body>
            <ParentTag>
                <tagRequest>
                    <Data1>FirstName</Data1>
                    <Data2>LastName</Data2>
                    <Value1>50</Value1>
                    <BooleanValue1>false</BooleanValue1>
                    <Address>
                        <StreetName>0000000</StreetName>
                        <Street-No>00000000000000</Street-No>
                    </Address>
                </tagRequest>
            </ParentTag>
        </soapenv:Body>
    </soapenv:Envelope>

1 个答案:

答案 0 :(得分:1)

xsl:copy-of更改为xsl:apply-templates,然后添加身份模板。这些更改之后,Street-No模板将匹配。 xsl:copy-of实际上仅复制元素树,而没有在树上应用模板。必须使用xsl:apply-templates完成此操作,该{<1>}使用身份模板复制所有与特定模板不匹配的节点。

我还将匹配表达式更改为与*[local-name()='Envelope']/*[local-name()='Body']/*类似的名称空间无关,因此根本不使用soap名称空间。

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
                              xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />

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

    <xsl:template match="/">
        <ns0:MainNode xmlns:ns0="http://test/system">
            <xsl:apply-templates select="*[local-name()='Envelope']/*[local-name()='Body']/*" />
        </ns0:MainNode>
    </xsl:template>

    <xsl:template match="Street-No">
        <xsl:element name= "StreetNo">
            <xsl:apply-templates select="node()|@*"/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

输出为:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:MainNode xmlns:ns0="http://test/system">
  <ParentTag>
        <tagRequest>
            <Data1>FirstName</Data1>
            <Data2>LastName</Data2>
            <Value1>50</Value1>
            <BooleanValue1>false</BooleanValue1>
            <Address>
                <StreetName>0000000</StreetName>
                <StreetNo>00000000000000</StreetNo>
            </Address>
        </tagRequest>
    </ParentTag>
</ns0:MainNode>