提问人:Benjamin 提问时间:11/4/2020 最后编辑:TylerHBenjamin 更新时间:11/21/2023 访问量:187
使用 XSL 转换表修改 XML 中的命名空间
modify namespace in XML using XSL transformation sheet
问:
我在尝试更改 XML 命名空间定义时遇到了问题。
我的输入 XML 中有这个命名空间:<ns3:DataElement xmlns:ns3="http://fakeurl_V3/xsd">
在我的XML中,我有一个字段:<productsList xsi:type="ns3:Segment" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
在我的 XSL 中,我这样做了:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns2="http://fakeurl_V2/xsd"
xmlns:ns3="http://fakeurl_V3/xsd"
... others namespace ....
>
<xsl:output method="xml" version="1.0" omit-xml-declaration="no"
encoding="UTF-8" indent="yes" />
....
<xsl:template match="ns3:*">
<xsl:element name="ns2:{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
....
结果是:
<ns2:DataElement xmlns:ns2="http://fakeurl_V2/xsd">
<productsList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ns3:Segment">
如您所见,命名空间 ns2 已按照我的意愿进行了更改。
但它并没有影响这条线:我需要转换成:xsi:type="ns3:Segment"
xsi:type="ns2:Segment"
你有什么解决方案吗?
答:
0赞
michael.hor257k
11/5/2020
#1
您可以添加一个模板,将旧前缀替换为新前缀,例如:
<xsl:template match="@xsi:type">
<xsl:attribute name="{name()}" select="replace(., '^ns3:', 'ns2:')" />
</xsl:template>
评论
xsi:type