Чтобы удалить пространства имен и родительские узлы из xml с помощью XSLT

Я хочу удалить пространства имен и родительские узлы из xml с помощью XSLT.

Ниже приведен источник и цель xml.kindly помочь мне.

****Source.xml****

<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <soapenv:body>
 <ns2:completeproductionplan xmlns="http://ServiceManagement/OIS_Services_v01.00/common" xmlns:ns2="http://ServiceManagement/TechnicalOrderManagement/ProductionFulfillment_v01.00/types">
 <ns2:messageid>
 <value>9133235059913398501_9133235059913398860</value>
 </ns2:messageid>
 </ns2:completeproductionplan>
 </soapenv:body>
 </soapenv:envelope>


****Target****

<completeproductionplan>
<messageid>9133235059913398501_9133235059913398860</messageid>
</completeproductionplan>

namespace_Remove.xsl

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

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

XSLT, который вы до сих пор удаляете пространства имен из XML, не изменит структуру. Для этого вам нужно добавить несколько дополнительных шаблонов, помня, что совпадение и выбор выражений в таблице стилей должны работать против исходного входного XML с пространствами имен, а не с версией пространства имен без названия.

Поэтому сначала вам нужно добавить некоторые объявления пространства имен в xsl:stylesheet:

Теперь вы можете добавить подходящие шаблоны:

<xsl:template match="/">
 <!-- ignore everything except the first child element of the Body -->
 </xsl:template>

<xsl:template match="ns2:messageID">
 
</xsl:template>

Конечно, для этого конкретного примера вы могли бы использовать гораздо более простую структуру стилей, жестко кодировать выходной формат в одном шаблоне и просто вытаскивать значение идентификатора сообщения из исходного XML, но хорошо привыкнуть к более универсальному стилю XSLT, когда вам придётся заниматься более сложными форматами.

licensed under cc by-sa 3.0 with attribution.