我想转换:
<ppx xmlns="http://www.p.com/ppx/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.p.com/ppx/1 http://www.p.com/ppx/1/ppx.xsd">
<p></p></ppx>
成:
<ppx xmlns="http://www.p.com/ppx/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ppxx="http://www.m.com/mExt/v1"
xmlns:ppxtpx="http://www.m.com/mExt/v3"
xsi:schemaLocation="http://www.p.com/ppx/1 http://www.p.com/ppx/1/ppx.xsd
http://www.m.com/mExt/v1 http://www.m.com/mExt/v1/ppxv1.xsd
http://www.m.com/mExt/v3 http://www.m.com/mExt/v3/ppxv3.xsd">
<p></p></ppx>
我需要将一些名称空间声明及其关联的schemaLocations添加到现有的XML文件中,而不更改该XML中的任何其他内容。
答案 0 :(得分:1)
原则上它很容易:它只需要一个标准的“修改后的身份模板”模式:
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="ppx">
<ppx xmlns="http://www.p.com/ppx/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ppxx="http://www.m.com/mExt/v1"
xmlns:ppxtpx="http://www.m.com/mExt/v3"
xsi:schemaLocation="http://www.p.com/ppx/1 http://www.p.com/ppx/1/ppx.xsd
http://www.m.com/mExt/v1 http://www.m.com/mExt/v1/ppxv1.xsd
http://www.m.com/mExt/v3 http://www.m.com/mExt/v3/ppxv3.xsd">
<xsl:apply-templates/>
</ppx>
</xsl:template>
但是,它可能会变得有点复杂,具体取决于输入与您向我们展示的示例有多大差异。例如,如果根元素不会始终命名为ppx
,或者事先不知道要添加的命名空间。所以你可能需要解释问题的更多细节