【发布时间】:2019-02-15 11:11:14
【问题描述】:
这是我的输入 XML
<?xml version="1.0"?>
<myroot xmlns="http://www.myroot.com/v0.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<A>TestProject1</A>
<B>ValueB</B>
</myroot>
我想将默认命名空间更改为 0.2 并通过 XSLT 转换添加一些新属性。我能够做到这一点,但在我的输出 xml 中,旧的命名空间别名不会像 xmlns:xsd 和 xmlns:xsi 那样保留。
有人指出我的 xslt 出了什么问题。
这是我的 XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:previous="http://www.myroot.com/v0.1">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="node()|@*">
<!-- Copy the current node -->
<xsl:copy >
<!-- Including any attributes it has and any child nodes -->
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="previous:myroot">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
<xsl:element name="NewElement">1234</xsl:element>
</xsl:copy>
</xsl:template>
<xsl:template
match="//*[namespace-uri()='http://www.myroot.com/v0.1']">
<xsl:element name="{local-name()}"
namespace="http://www.myroot.com/v0.2">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
这是输出 xml(缺少 xsi 和 xsd 命名空间)
<?xml version="1.0"?>
<myroot xmlns="http://www.myroot.com/v0.2" >
<A>TestProject1</A>
<B>ValueB</B>
<NewElement>1234</NewElement>
</myroot>
但 * 预期输出是
<?xml version="1.0"?>
<myroot xmlns="http://www.myroot.com/v0.1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<A>TestProject1</A>
<B>ValueB</B>
<NewElement>1234</NewElement>
</myroot>
【问题讨论】: