У меня есть XML-файл, который содержит элементы с префиксом пространства имен и соответствующим URI.
Я хочу сделать две вещи:
Заменить URI пространства имен и префиксс другим в xml: xmlns: urn = "http://abcd" до xmlns: xsns =" http://123", так что <urn:FirstELement>
становится <xsns:SecondElement>
корневым элементомнеобходимо заменить: <urn:RootElementOld xmlns:urn="http://abcd">
заменить на <xsns:RootElementNew xmlns:xsns="http://123">
Входной XML (аналогично фактическому):
<urn:RootElementOld xmlns:urn="http://abcd">
<urn:FirstElement>
<urn:FirstSubElement id1="abc" id2="efg">FirstValue</urn:FirstSubElement>
<urn:SecondSubElement id3="hij" id4="klm">SecondValue</urn:SecondSubElement>
</urn:FirstElement>
<urn:SecondElement>
<urn:ThirdSubElement id5="nop" id6="qrs">ThirdValue</urn:ThirdSubElement>
<urn:FourthSubElement id7="tuv" id8="wxy">FourthValue</urn:FourthSubElement>
</urn:SecondElement>
</urn:RootElementOld>
Ожидаемый вывод XML:
<xsns:RootElementNew xmlns:xsns="http://123">
<xsns:FirstElement>
<xsns:FirstSubElement id1="abc" id2="efg">FirstValue</xsns:FirstSubElement>
<xsns:SecondSubElement id3="hij" id4="klm">SecondValue</xsns:SecondSubElement>
</xsns:FirstElement>
<xsns:SecondElement>
<xsns:ThirdSubElement id5="nop" id6="qrs">ThirdValue</xsns:ThirdSubElement>
<xsns:FourthSubElement id7="tuv" id8="wxy">FourthValue</xsns:FourthSubElement>
</xsns:SecondElement>
</xsns:RootElementNew>
Мой вывод:
<xsns:RootElementOld xmlns:xsns="http://123">
<xsns:FirstElement>
<xsns:FirstSubElement id1="abc" id2="efg">FirstValue</xsns:FirstSubElement>
<xsns:SecondSubElement id3="hij" id4="klm">SecondValue</xsns:SecondSubElement>
</xsns:FirstElement>
<xsns:SecondElement>
<xsns:ThirdSubElement id5="nop" id6="qrs">ThirdValue</xsns:ThirdSubElement>
<xsns:FourthSubElement id7="tuv" id8="wxy">FourthValue</xsns:FourthSubElement>
</xsns:SecondElement>
</xsns:RootElementOld>
Мой XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:urn="http://abcd"
xmlns:xsns="http://123" exclude-result-prefixes="urn">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="*">
<xsl:element name="xsns:{local-name(.)}" namespace="http://123">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
<xsl:template match="urn:RootElementOld">
<xsl:element name="xsns:RootElementNew" namespace="http://123">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Не могли бы вы мне помочь?Я новичок в XSLT.