gpt4 book ai didi

java - 从 XSD 将命名空间添加到 XML

转载 作者:行者123 更新时间:2023-11-30 03:35:08 25 4
gpt4 key购买 nike

例如我有 XML:

<a>
<b>c</b>
</a>

xsdA.xsd:

<xs:import schemaLocation="xsdB.xsd"/>
<xs:element name="a" xmlns:xsa="http://www.example.org/a" type="xsa:aType"></xs:element>

xsdB.xsd:

<xs:element name="b" xmlns:xsb="http://www.example.org/b" type="xsb:bType"></xs:element>

我想以某种方式将 XML 转换为:

<xsa:a xmlns:xsa="http://www.example.org/a">
<xsb:b xmlns:xsb="http://www.example.org/b">c</xsb:b>
</xsa:a>

我听说可以通过 JAXB 来完成,但是有没有办法在不生成代码的情况下做到这一点?我使用 Java。

编辑:

这只是一个例子。我可以通过 xslt 或在 DOM 对象中手动添加 namespace ,但我的 xsd 现在大小为 170K。而且它经常发生变化。我只想更换 xsd,程序就可以继续工作。

如何在一堆 xsd 文件中找到具有给定本地名称的元素的 namespace ?

编辑2:

我的 xsd 中的所有本地名称似乎都不同。

最佳答案

正如 laune 所建议的,一个非常基本的 XSLT 应该可以帮助您入门。

XSLT:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsa="http://www.example.org/a"
xmlns:xsb="http://www.example.org/b">
<xsl:output omit-xml-declaration="no" indent="yes" />

<xsl:template match="a">
<xsa:a><xsl:apply-templates select="node() | @*" /></xsa:a>
</xsl:template>

<xsl:template match="b">
<xsb:b><xsl:apply-templates select="node() | @*" /></xsb:b>
</xsl:template>

<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

输入:

<a>
<b>c</b>
</a>

输出:

<xsa:a xmlns:xsa="http://www.example.org/a" xmlns:xsb="http://www.example.org/b">
<xsb:b>c</xsb:b>
</xsa:a>

关于java - 从 XSD 将命名空间添加到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28170023/

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