2017-02-17 14 views
0

Исходное сообщение:XSLT Чтобы изменить пространство имен - Совместимость версий

XSLT to change namespace in element

Сво относительно моей ранее пост с программой XSLT для замены имен. Я ответил на этот вопрос, но при тестировании с моей системой он показывает ошибку, поскольку прикладная система i поддерживает работу версии 1.0.

. Нужна какая-либо помощь, чтобы сделать код совместимым с версией 1.0. Ниже XSL:

<xsl:stylesheet 
    version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsd="http://www.xx.com" 
    xmlns:ns="http://www.mnv.com/elc/sap" 
    exclude-result-prefixes="ns"> 

    <xsl:output encoding='UTF-8' indent='yes' method='xml'/> 

    <!-- copy everything into the output --> 
    <xsl:template match='@*|node()'> 
     <xsl:copy> 
      <xsl:apply-templates select='@*, node()'/> 
     </xsl:copy> 
    </xsl:template> 

    <!-- template to match ns:IRenvelope element and creating a new element --> 
    <xsl:template match="ns:IRenvelope"> 
     <xsl:element name="IRL" namespace="http://www.xx.com"> 
      <xsl:apply-templates select="@*, node()"/> 
     </xsl:element> 
    </xsl:template> 

    <!-- 
     template to change the namespace 
     of the elements 
     from "http://www.mnv.com/elc/sap" 
     to "http://www.xx.com" 
    --> 

    <xsl:template match="ns:*"> 
     <xsl:element name="{local-name()}" namespace="http://www.xx.com"> 
      <xsl:apply-templates select="@*, node()"/> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

мой XML-сообщение будет:

<GMessage xmlns="http://www.giffgaff.uk/CM/envelope"> 
    <EnvelopeVersion>2.0</EnvelopeVersion> 
    <body> 
     <IRenvelope xmlns="http://www.mnv.com/elc/sap"> 
      <Keys> 
       <Key Type="TaxOfficeNumber">635</Key> 
      </Keys> 
     </IRenvelope> 
    </body> 
</GMessage> 

ожидаемый результат:

<?xml version="1.0" encoding="UTF-8"?> 
<GMessage xmlns="http://www.giffgaff.uk/CM/envelope"> 
    <EnvelopeVersion>2.0</EnvelopeVersion> 
    <body> 
     <IRL xmlns="http://www.xx.com"> 
      <Keys> 
       <Key Type="TaxOfficeNumber">635</Key> 
      </Keys> 
     </IRL> 
    </body> 
</GMessage> 

ответ

1

Проблема заключается исключительно с этими линиями ...

<xsl:apply-templates select='@*, node()'/> 

Этот синтаксис недействителен в XSLT 1.0. В XSLT 2.0 запятая используется для создания «последовательности».

Однако, вы можете просто заменить вхождения этой строки с этим вместо, которые будут работать как в XSLT 1.0 и 2,0

<xsl:apply-templates select='@*|node()'/> 

Символ трубы представляет собой объединение оператора присоединиться множеством узлов.

+0

Спасибо. Это сработало ..... Пожалуйста, можете ли вы помочь в том, как иметь пространство имен как: в xml? –

+1

Возможно, вам лучше задать новый вопрос, так как я не совсем уверен, в чем проблема. Благодарю. –

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