java - 如何在 Java 中删除 XML 命名空间

标签 java xml jaxb xml-namespaces sax

我需要使用 Java 从 XML 中删除命名空间(该项目还使用 SAX/JAXB)。下面的示例说明了所需的内容,主要是将输入 XML 转换为结果 XML。关于如何实现这一点的任何建议/工作示例?

输入 XML:

<ns2:client xmlns:ns2="http://my-org/schemas" instance="1">

        <ns2:dob>1969-01-01T00:00:00</ns2:dob>

        <ns2:firstname>Anna</ns2:firstname>

        <ns2:married>false</ns2:married>

        <ns2:gender>Female</ns2:gender>

        <ns2:surname>Smith</ns2:surname>

        <ns2:title>Miss</ns2:title>

</ns2:client>

结果 XML:

<client instance="1">

        <dob>1969-01-01T00:00:00</dob>

        <firstname>Anna</firstname>

        <married>false</married>

        <gender>Female</gender>

        <surname>Smith</surname>

        <title>Miss</title>

</client>

最佳答案

这是一个相当常见的问题,快速搜索发现了以下问题:

How do I remove namespaces from xml, using java dom?

Remove namespace from XML in Java

就我个人而言,我认为 XSLT 是最明显的技术,因为这正是 XSLT 的发明目的(XML 到 XML 转换)。我已成功使用此 XSLT 来剥离 namespace (归功于 https://stackoverflow.com/users/18771/tomalak ):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="node()">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
  </xsl:template>

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

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

您将在两个线程中找到用于执行该 XSLT 的 Java 代码。

关于java - 如何在 Java 中删除 XML 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69415939/

相关文章:

java - 入站网关中的 HttpMessageConverter 错误处理

java - 选择性编码对象

Java8 : About Functional Interface

mysql - 使用 MySQL 和 XSD 文件验证 XML 字段

xml - Unix - 取消注释 xml 注释

java - 添加 XMLAdapter 会导致 JAXBContext.newInstance 方法中出现 NullPointerException

java |如何使用 JAXB 解析此 ('3-level' ) xml?

java - 为什么类文件不包含足够的信息来提供 NPE 中为空的指针的名称?

java - 显示链表的第一个节点

java - Jackson:获取反序列化的空引用