gpt4 book ai didi

xml - 如何删除默认 namespace 并使用 XSLT 保留其余 namespace ?

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

我有一个 XML 文件,其中包含默认命名空间和需要删除的空命名空间,同时保留其余命名空间。

输入:

<prefix:request xmlns:prefix="urn1" xmlns:foo2="urn2" xmlns="urn1">
<element1 xmlns="">version1</element1>
<element2 xsi:type="prefix:requestA" xmlns=""/>
...
</element1>
</prefix:request>

预期输出:

<prefix:request xmlns:prefix="urn1" xmlns:foo2="urn2">
<element1>version1</element1>
<element2 xsi:type="prefix:requestA"/>
...
</element1>
</prefix:request>

用于删除 namespace 的 XSLT 示例将过滤掉所有 namespace ,包括前缀。知道如何解决这个特殊案例吗?

最佳答案

这个简短的转换:

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

<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:copy-of select="@*|namespace::*[name()]"/>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

当应用于(严重畸形且必须更正)提供的类 XML 输入时:

<prefix:request xmlns:xsi="Undefined !!!"
xmlns:prefix="urn1" xmlns:foo2="urn2"
xmlns="urn1">
<element1 xmlns="">version1</element1>
<element2 xsi:type="prefix:requestA" xmlns=""/> ...
</prefix:request>

产生想要的、正确的结果:

<prefix:request xmlns:prefix="urn1" xmlns:xsi="Undefined !!!" xmlns:foo2="urn2">
<element1>version1</element1>
<element2 xsi:type="prefix:requestA"/> ...
</prefix:request>

关于xml - 如何删除默认 namespace 并使用 XSLT 保留其余 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7023533/

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