gpt4 book ai didi

xslt - 使用 xslt2.0 添加命名空间

转载 作者:行者123 更新时间:2023-12-04 16:55:45 24 4
gpt4 key购买 nike

互联网上有很多引用资料与我有同样的问题。是命名空间的添加,我看到的也是这个:Adding namespace in inner parent group in xslt v2.0 .但在我的情况下,我在父标签中没有命名空间并将命名空间插入到内部级别组中。我试图复制解决方案,但无法获得预期的输出。例如,我有这个示例文件,

输入:

<Record>
<Data>
<Section>
<ID>111222</ID>
</Section>
</Data>
</Record>

预期:
<Record>
<Data>
<Section xmlns="www.hdgd.co">
<ID>111222</ID>
</Section>
</Data>
</Record>

XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="Section">
<Section xmlns="www.hdgd.co">
<xsl:copy-of select="*"/>
</Section>
</xsl:template>

生成的输出在 ID 元素中填充了一个空命名空间。而且,我需要删除那个空的 xmlns。看起来像这样:
    <Record>
<Data>
<Section xmlns="www.hdgd.co">
<ID xmlns="">111222</ID>
</Section>
</Data>
</Record>

最佳答案

您不能使用:

<xsl:copy-of select="*"/>

因为这会复制其原始命名空间中的子节点 - 这是无命名空间。要得到你想要的结果,你不仅要动 Section到新的命名空间,还有它的所有后代(并保留所有其他节点) - 例如:

XSLT 1.0
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="*[ancestor-or-self::Section]">
<xsl:element name="{name()}" namespace="www.hdgd.co">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>

</xsl:stylesheet>

关于xslt - 使用 xslt2.0 添加命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44275832/

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