2016-09-13 4 views
0

входныхXSLT, чтобы удалить несколько узлов и получить заданный узел с его дочерних узлов

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body><jsonObject> 
<User> 
<No>123</No> 
<Id>1</Id> 
<MailCode>43</MailCode> 
<Number>998</Number> 
</User> 
</jsonObject></soapenv:Body> 
</soapenv:Envelope> 

Ожидаемый вывод

<User xmlns="http://sample.org"> 
<No>123</No> 
<Id>1</Id> 
<MailCode>43</MailCode> 
<Number>998</Number> 
</User> 

Текущий XSLT

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns="http://sample.org"> 


<xsl:template match="jsonObject"> 
</xsl:template> 

<xsl:template match="User"> 
     <!--Define the namespace --> 
     <xsl:element name="{local-name()}" namespace="http://sample.org"> 
      <!--apply to above selected node--> 
      <xsl:apply-templates select="node()|@*"> 

     </xsl:apply-templates></xsl:element> 
    </xsl:template> 


</xsl:stylesheet> 

Но выходной ток,

<User xmlns="http://sample.org"> 
123 
1 
43 
998 
</User> 

Что я здесь делаю неправильно? Также есть способ прямого извлечения содержимого узла <User> вместо написания отдельных шаблонов для удаления узлов, таких как <jsonObject>?

+0

Выход вы утверждаете, не выход, полученный путем выполнения кода вы выложили. - Обратите внимание, что XML, который вы опубликовали, не имеет элементов 'JsonObject' или' Request', поэтому ваша таблица стилей ничего не делает, кроме применения встроенных правил шаблонов. –

+0

Извините, что это была опечатка. Я добавил правильный XSLT сейчас. В основном для вывода мне нужен только узел и его дочерние элементы с новым пространством имен. – user2894296

+0

Ваш новый XSLT также не выводит заявленный результат. –

ответ

1

Ожидаемый результат может быть достигнут путем применения следующих стилей:

XSLT 1,0

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

<xsl:template match="User | User/*" > 
    <xsl:element name="{local-name()}" namespace="http://sample.org"> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet>