2016-03-04 2 views
0

Имейте этот XML, и мне нужно удалить все префиксы, я сделал это раньше, но есть специальный префикс NS2, который Im не удалось удалить.XSL - Как удалить это конкретное префикс пространства имен?

проверка:

Входной 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> 

Im проблемы Снятие NS2 после тело t аг, Кто-нибудь знает, как я могу добиться этого, благодаря

+0

Просьба указать точный результат, который вы ожидаете получить. –

ответ

0

Вот как удалить все префиксы входного 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> 

Но это также удаляет все определения пространства имен. В настоящее время я не знаю, как вам нравится обращаться с ними.

Смежные вопросы