如何删除与属性关联的Soap名称空间

时间:2019-02-07 13:49:46

标签: xslt-2.0 xslt-3.0

我必须删除与ConfigR(attribute)相关联的肥皂名称空间。

在XSLT内部,我正在使用XSL Copy,因此排除前缀不起作用。

我在下面尝试过,但是没有用。任何人都可以建议。

     <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
     <xsl:output indent="yes"/>
     <xsl:template match="@* | node()">
    <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
     </xsl:template>
      <xsl:template match="soapenv:*">
   <xsl:apply-templates select="@* | node()"/>
       </xsl:template>
       </xsl:stylesheet>

输入-

              <soapenv:Envelope 
           xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
         <soapenv:Body>
      <ConfigR>
        Inside I have some more input.
      </ConfigR>
        </soapenv:Body>
         </soapenv:Envelope>   




     Now in Output I am getting:
         <ConfigR xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 

1 个答案:

答案 0 :(得分:1)

您可以替换现有模板:

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

具有以下内容:

<xsl:template match="*">
    <xsl:element name="{local-name(.)}">
        <xsl:apply-templates select="@* | node()" />
    </xsl:element>
</xsl:template>
<xsl:template match="@*">
    <xsl:attribute name="{local-name(.)}">
        <xsl:value-of select="." />
    </xsl:attribute>
</xsl:template>

您可以找到它here