次のようなソース 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>
両方の xml のスキーマは同じですが、名前空間が異なります。
次の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 に非常に慣れていません。