gpt4 book ai didi

java - 使用 XSLT 复制 XML 时绕过命名空间

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

从具有默认 namespace 的 XML 开始:

<Root>
<A>foo</A>
<B></B>
<C>bar</C>
</Root>

我应用 XSLT 来删除“C”元素:

<?xml version="1.0" ?>

<xsl:stylesheet version="2.0" xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" indent="no" encoding="utf-8" />

<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>

<xsl:template match="C" />

</xsl:stylesheet>

我最终得到以下 XML(不折叠“B”是可以的,因为我使用 HTML 作为输出方法):

<Root>
<A>foo</A>
<B></B>
</Root>

但是如果我得到另一个 XML,这次带有命名空间:

<Root xmlns="http://company.com">
<A>foo</A>
<B></B>
<C>bar</C>
</Root>

“C”元素在 XSLT 处理后未被删除。

我可以做些什么来绕过这个命名空间,有什么办法吗?

最佳答案

不太值得推荐,但有效:

<xsl:template match="*[local-name()='C']" />

更好:

<xsl:stylesheet 
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foo="http://company.com"
exclude-result-prefixes="foo"
>

<!-- ... -->

<xsl:template match="C | foo:C" />

<!-- ... -->

</xsl:stylesheet>

关于java - 使用 XSLT 复制 XML 时绕过命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/981028/

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