我有一个源 xml,如下所示:
<SampleRequest xmlns="http://sample.com/s"
xmlns:s1="http://sample.com/s1"
xmlns:s2="http://sample.com/s2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://sample.com/s schema.xsd">
<data>
<s1:customer s1:firstName="Jim" s1:lastName="Ellison"/>
<s2:address>
123 test street
</s2:address>
</data>
</SampleRequest>
我需要将其转换为以下
<SampleRequest xmlns="http://sample.com/t"
xmlns:t1="http://sample.com/t1"
xmlns:t2="http://sample.com/t2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://sample.com/t targetSchema.xsd">
<data>
<t1:customer t1:firstName="Jim" t1:lastName="Ellison"/>
<t2:address>
123 test street
</t2:address>
</data>
</SampleRequest>
两个 xmls 具有相同的架构但不同的命名空间。
我试图使用以下 xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://sample.com/s"
xmlns:s1="http://sample.com/s1"
xmlns:s2="http://sample.com/s2"
xmlns:t1="http://sample.com/t1"
xmlns:t2="http://sample.com/t2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="s1 s2">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<SampleRequest xmlns="http://sample.com/t"
xmlns:t1="http://sample.com/t1"
xmlns:t2="http://sample.com/t2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:attribute name="xsi:schemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance">
http://sample.com/t targetSchema.xsd
</xsl:attribute>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</SampleRequest>
</xsl:template>
<xsl:template match="s1:*">
<xsl:element name="t1:{local-name()}" namespace="http://sample.com/t1">
<xsl:apply-templates select="* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="s2:*">
<xsl:element name="t2:{local-name()}" namespace="http://sample.com/t2">
<xsl:apply-templates select="* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我得到以下结果
<?xml version="1.0" encoding="UTF-8"?><SampleRequest xmlns="http://sample.com/t" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t2="http://sample.com/t2" xmlns:t1="http://sample.com/t1" xsi:schemaLocation=" http://sample.com/t targetSchema.xsd">
<t1:customer/>
<t2:address>
123 test street
</t2:address>
</SampleRequest>
似乎所有属性都丢失了。我对 XSLT 很陌生,感谢每一点帮助