【问题标题】:Remove all the namespaces in xml other than replaceall using java删除xml中的所有命名空间,除了replaceall using java
【发布时间】:2014-06-30 06:17:19
【问题描述】:

我想用java删除xml文档中的所有命名空间,除了replace all方法,有没有更有效的方法?

提前致谢。 苏什玛。

【问题讨论】:

  • 是的,将 XML 解析为对象树,删除命名空间并再次序列化 XML。说真的,全部替换怎么样?
  • 结果如何?
  • 你好,我是java新手,你能简单解释一下吗..

标签: java xml xslt xml-parsing xml-namespaces


【解决方案1】:

使用正则表达式处理删除命名空间声明可能是可行的,前提是您不关心匹配实际上不是命名空间声明的内容的可能性很小(例如,在注释或 CDATA 部分中)。从元素和属性名称中删除前缀更加棘手。为什么不使用 XSLT 简单的方法呢?它只需要一个简单的 2 规则样式表:

<xsl:template match="*">
  <xsl:element name="{local-name()}">
    <xsl:apply-templates select="*|@*"/>
  </xsl:element>
</xsl:template>

<xsl:template match="@*">
  <xsl:attribute name="{local-name()}">
    <xsl:value-of select=."/>
  </xsl:attribute>
</xsl:template>

如果您发现需要做更多的事情,您可以添加更多规则,例如将命名空间保留在 xml:base 或 xsi:schemaLocation 属性上。

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2021-11-23
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多