Я пишу сценарий XSLT, и моя цель состоит в том, чтобы вставить пространство имен (http://www.COMP.com/upp/readxml/09) с корневым элементом. Я написал несколько вариантов, и 2 моих кода частично разрешают его.
- XSLT-код AB - этот код вставляет пространство имен, но все значения атрибутов объединяются и теги не предоставляются.
- XSLT Code PQ - этот код вставляет пространство имен, но изменяет иерархию второго узла и помещает его в качестве корневого элемента.
CODE AB:
<xsl:stylesheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:tns="http://www.COMP.com/upp/readxml/09">
<xsl:output method="xml"/>
<xsl:template match="*">
<xsl:variable name="elname">
<xsl:text disable-output-escaping="yes">tns:</xsl:text>
<xsl:value-of select="local-name()"/>
</xsl:variable>
<xsl:element name="tns:{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Код PQ:
<xsl:stylesheet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml"/>
<xsl:template match="*" priority="1">
<xsl:element name="{local-name()}" namespace="http://www.COMP.com/upp/readxml/09">
<xsl:copy-of copy-namespaces="no" select="*[local-name() != 'RootDocument']"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
ВХОД XML:
<?xml version="1.0" encoding="us-ascii" standalone="yes"?>
<RootDocument xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<System Id="GOLD" />
<Creation_Datetime Datetime="2019-02-19T17:53:38Z" />
<Timezone Id="UTC" />
<CorrelationID Id="" />
</Header>
<Channels>
<Channel StartDate="2019-01-01T00:00:00-05:00" EndDate="2019-02-01T00:00:00-05:00" TimeZone="EasternUS">
<ChannelID ID="LC:2A" />
</Channel>
</Channels>
</RootDocument>
ОЖИДАЕМЫЙ выходной XML:
<?xml version="1.0" encoding="us-ascii" standalone="yes"?>
<RootDocument xmlns="http://www.COMP.com/upp/readxml/09" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<System Id="GOLD" />
<Creation_Datetime Datetime="2019-02-19T17:53:38Z" />
<Timezone Id="UTC" />
<CorrelationID Id="" />
</Header>
<Channels>
<Channel StartDate="2019-01-01T00:00:00-05:00" EndDate="2019-02-01T00:00:00-05:00" TimeZone="EasternUS">
<ChannelID ID="LC:2A" />
</Channel>
</Channels>
</RootDocument>
OR
<?xml version="1.0" encoding="us-ascii" standalone="yes"?>
<RootDocument xmlns="http://www.COMP.com/upp/readxml/09">
<Header>
<System Id="GOLD" />
<Creation_Datetime Datetime="2019-02-19T17:53:38Z" />
<Timezone Id="UTC" />
<CorrelationID Id="" />
</Header>
<Channels>
<Channel StartDate="2019-01-01T00:00:00-05:00" EndDate="2019-02-01T00:00:00-05:00" TimeZone="EasternUS">
<ChannelID ID="LC:2A" />
</Channel>
</Channels>
</RootDocument>
Подскажите, пожалуйста, как правильно получить атрибут в XML или каким-либо другим способом просто вставить пространство имен, сохранив остальную часть XML таким же.