我有一些第三方 XML 需要解析,格式如下。测试次数无限制,但始终是整数。
<tests>
<test_1>
<foo bar="baz" />
</test_1>
<test_2>
<foo bar="baz" />
</test_2>
<test_3>
<foo bar="baz" />
</test_3>
</tests>
我目前正在使用 XPath 解析它,但它很困惑。有没有办法在 XSD 模式中表达这种风格的 XML 并从中生成 JAXB 类。
据我所知这是不可能的,唯一可能的是 <xs:any processContents="lax"/>
技术来自
how can I define an xsd file that allows unknown (wildcard) elements?
,但是这允许任何内容,而不是特定的 <test_<integer>
。我只是想确认我没有错过一些 XSD/JAXB 技巧?
注意我更希望 XML 的结构像这样。我可能会尝试说服第三方改变。
<tests>
<test id="1">
<foo bar="baz" />
</test>
<test id="2">
<foo bar="baz" />
</test>
<test id="3">
<foo bar="baz" />
</test>
</tests>
最佳答案
虽然有多种方法可以处理具有结构化名称(例如数字后缀)的元素,
- XPath:对
name()
或local-name()
使用字符串测试 - XSD:请参阅 XSD element name pattern matching
- JAXB:请参阅 Dealing with poorly designed XML with JAXB
您确实应该修复底层 XML 设计(test_1
应该是 test
)。
关于java - 使用结构化元素名称解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316067/