gpt4 book ai didi

java - 改进 xsd :any in Java code 的使用

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

我有一些旧版 XML 文档需要导入到我的一款软件中。目前给我带来一些麻烦的部分是 Param 元素的内容:

示例.xml

<...>
<Param>
<IdNumber>12345678</IdNumber>
<Factor>12.3</Factor>
<Date>2015-07-01</Date>
<Counter unit="1">
<Medium>1</Medium>
...
</Counter>
<Counter unit="2">
<Medium>4</Medium>
...
</Counter>
...
</Param>
</...>

Param 中可以有许多(数量可能不同)子元素,为了避免在 XSD 中列出所有子元素,声明如下:

架构.xsd

...
<xs:element name="Param">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" />
</xs:sequence>
</xs:complexType>
</xs:element>
...

当我使用 XJC 工具生成用于编码/解码的一对一类时,我得到的是:

参数.java

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"any"
})
@XmlRootElement(name = "Param")
public class Param {

@XmlAnyElement
protected List<Element> any;

public List<Element> getAny() {
if (any == null) {
any = new ArrayList<Element>();
}
return this.any;
}

}

我的问题是使用 Param 类并不容易,因为它只包含 Element 列表,需要改进。

我看到 3 个解决方案:

  1. 什么都不改变
  2. 通过声明所有可能的元素(和子元素)来完成 XSD,使我能够对 Param 类中的每个元素进行特定访问。
  3. Param 中使用 Map 而不是列表,以简化搜索/提取元素。虽然我不知道如何实现这一点,并且 <Counter unit="1"><Counter unit="2"> 的情况可能会出现问题。

因此,我正在寻求一些建议,以选择这三种解决方案中的一种提出另一种解决方案。

最佳答案

我的看法;

  • 我想说,如果您百分百确定会发生什么,那么选项 2 就是您的选择。然而,对 XSD 进行建模可能会很痛苦。
  • 选项 3 对我来说似乎不可行,深度 > 2 的反例就是一个例子。
  • 最后,我曾参与过采用选项 1 的项目,因此也应该考虑它(您需要编写和维护代码,但使其工作非常简单)。

关于java - 改进 xsd :any in Java code 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31564991/

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