繁体   English   中英

XSL-如何删除此特定的命名空间前缀?

[英]XSL - How to remove this specific Namespace Prefix?

拥有此XML,我需要删除所有前缀,我之前已经这样做过,但是我无法删除特定的NS2前缀。

校验:

输入XML

     <NS1:Envelope xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/">
 <NS1:Header>
 <NS2:responseHeader xmlns:NS2="http://test.com">
  <systemId>SI</systemId> 
  <messageId>000001</messageId> 
  <timestamp>2015-01-16T10:10:09.872983</timestamp> 
<responseStatus>
  <statusCode>Success</statusCode> 
  </responseStatus>
  </NS2:responseHeader>
  </NS1:Header>
 <NS1:Body>
  <NS2:modificarSolicitudDeCreditoResponse xmlns:NS2="http://test2.com/21"/> 
   </NS1:Body>
  </NS1:Envelope>

我的XSLT:

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>
 <xsl:template match="NS2:modificarSolicitudDeCreditoResponse">
  <modificarSolicitudDeCreditoResponse>
    <xsl:apply-templates select="@*|node()"/>
  </modificarSolicitudDeCreditoResponse>
</xsl:template>
<xsl:template match="NS1:Header">
  <Header>
    <xsl:apply-templates select="@*|node()"/>
  </Header>
  </xsl:template>
  <xsl:template match="NS2:responseHeader">
  <responseHeader>
    <xsl:apply-templates select="@*|node()"/>
  </responseHeader>
  </xsl:template>
  <xsl:template match="NS1:Body">
  <Body>
    <xsl:apply-templates select="@*|node()"/>
  </Body>
  </xsl:template>
         <xsl:template match="/*">
    <Envelope>
    <xsl:apply-templates select="node()" />
    </Envelope>
  </xsl:template>
     </xsl:stylesheet>

这是我的输出:

<?xml version='1.0' ?>
<Envelope xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/"
 <Header>
 <responseHeader>
  <systemId>AW0856</systemId> 
  <messageId>0000012</messageId> 
  <timestamp>2015-01-16T10:10:09.872983</timestamp> 
<responseStatus>
  <statusCode>Success</statusCode> 
  </responseStatus>
  </responseHeader>
  </Header>
 <Body>
  <NS2:modificarSolicitudDeCreditoResponse xmlns:NS2="http://test2.com/21"> 
  </Body>
  </Envelope>

我在移除身体标签后无法移除NS2,有人知道我如何实现这一目标,谢谢

这是删除输入XML的所有前缀的方法:复制元素,同时将其name()替换为local-name() (不带名称空间的名称)。

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

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

</xsl:stylesheet>

输出是

<?xml version="1.0"?>
<Envelope>
    <Header>
        <responseHeader>
            <systemId>SI</systemId> 
            <messageId>000001</messageId> 
            <timestamp>2015-01-16T10:10:09.872983</timestamp> 
            <responseStatus>
                <statusCode>Success</statusCode> 
            </responseStatus>
        </responseHeader>
    </Header>
    <Body>
        <modificarSolicitudDeCreditoResponse/>             
    </Body>
</Envelope>

但这也会删除所有名称空间定义。 目前,我不知道您如何处理这些问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM