java - JAXB/XSD:数字而不是元素名称
问题描述
我必须从 xml 文件创建 Java 对象(在转换之前我无法编辑),所以我认为创建 XSD 然后通过 JAXB 解组文件可能是最好的。问题是,该 XML 中有一些元素的格式如下:
<parent-element>
<id-00001>...</id-00001>
<id-00002>...</id-00002>
...
</parent-element>
所以基本上我有一个xml元素列表,元素的“名称”是列表中的顺序。每个列表中可能有无限数量的元素。是否可以使用 JAXB 解组它,还是我必须使用 XML-Reader 并循环遍历元素?“id-XXXXX”元素在内部都以相同的方式格式化,因此如果将其格式化为“”,则可能没有任何问题。
提前致谢!
解决方案
由于您的 xml 可能具有无限数量的“id 元素”,因此创建匹配的 POJO 结构是很棘手的。您可以使用@XmlAnyElement
和适配器。@XmlAnyElement
会将不同的元素读取为 dom 节点,您可以在适配器中处理它们。
例如,使用下面给出的 xml:
<parent-element>
<id-00001>value 1</id-00001>
<id-00002>value 2</id-00002>
</parent-element>
您的根可能如下所示:
@XmlRootElement(name = "parent-element")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlAnyElement
@XmlJavaTypeAdapter(MyAdapter.class)
private List<String> varyingElements;
}
你的适配器是这样的:
public class MyAdapter extends XmlAdapter<Element, String> {
@Override
public Element marshal(String arg0) throws Exception {
// do what you must
return null;
}
@Override
public String unmarshal(Element element) throws Exception {
return element.getChildNodes().item(0).getNodeValue();
}
}
元素如org.w3c.dom.Element
推荐阅读
- python - 一个看似简单的列表索引超出范围错误
- python - 使用 numpy/python 将具有相同索引的值相加
- ruby-on-rails - Rails:是否有必要将我的 POST 响应包装在 respond_to 块中?
- c++ - 如何从 C++ 中的两个向量生成所有可能的对?
- php - OpenCart 将变量从控制器传递给树枝
- list - Haskell 中嵌套空列表的列表
- windows - 打开记事本并使用 .bat 文件写一些东西
- c# - c# System.Data.SqlClient.SqlException: macOS 中的 Snix_Connect
- r - 在使用 igraph 绘制网络时,如何根据特定的 actor 属性更改顶点颜色?
- c# - 如何在 xaml/mvvm 中启用/禁用 ffimageloading 转换?[Xamarin 形式]