gpt4 book ai didi

xml - XSLT 中的命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:55 31 4
gpt4 key购买 nike

我正在使用 XSLT 重构 XML 文件。以下代码将所有子节点复制到一个新的 XML 文件中:

<!--Add all child elements of the zzz node-->
<xsl:template match="zzz">
<Trade>
<xsl:attribute name="ID">
<xsl:value-of select="TradeId" />
</xsl:attribute>
<xsl:copy-of select="*"></xsl:copy-of>
</Trade>
</xsl:template>

我想修改代码,以便将节点放入不在源文档中的特定命名空间。我需要更改什么?

最佳答案

前两个答案(由 teun 和 Craig Bovis 提供)不正确——请参阅我对每个答案的评论。

将给定元素移动到新命名空间的正确方法涉及重新创建该元素,如下所示:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="zzz">
<trade ID="{TradeId}">
<xsl:apply-templates select="*[not(self::TradeId)]"/>
</trade>
</xsl:template>

<xsl:template match="zzz/*">
<xsl:element name="{name()}" namespace="my:Trade">
<xsl:copy-of select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

当此转换应用于以下源 XML 文档时:

<zzz>
<TradeId>153</TradeId>
<x:item xmlns:x="x:x">A</x:item>
<x:item xmlns:x="x:x">B</x:item>
<x:item xmlns:x="x:x">C</x:item>
</zzz>

生成了所需的结果:

<trade ID="153">
<x:item xmlns:x="my:Trade">A</x:item>
<x:item xmlns:x="my:Trade">B</x:item>
<x:item xmlns:x="my:Trade">C</x:item>
</trade>

关于xml - XSLT 中的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553904/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com