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

标签 java xml xslt

从具有默认 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/

相关文章:

Java多线程等于多核?

java - JPA 外键 - ID 或引用

c# - 序列化字典包装器时出现问题

python - 我如何映射到字典而不是列表?

xml - 在 Cocoa 中解析 XML

regex - XSLT - 获取 text() 节点的数值

html - 用于 Xml 到表转换的 XSL

非常小的字典的Java语音识别

Java Quaqua 弹出菜单

xml - XSLT中的总金额