如何删除 Java 中的 XML 命名空间
How to remove XML namespace in Java
我需要使用 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-to-XML 转换)。我已成功使用此 XSLT 剥离命名空间(致谢 https://whosebug.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 从 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-to-XML 转换)。我已成功使用此 XSLT 剥离命名空间(致谢 https://whosebug.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 代码。