【发布时间】:2023-03-29 04:40:01
【问题描述】:
我有以下 XML:
<root>
<hd h01="728" ... />
<tr t01="12" ... />
<tr t01="16" ... />
<tl t01="9" ... />
<hd h01="0" ... />
<tr t01="33" ... />
<tl t01="2" ... />
...
</root>
我需要它是这样的:
<root>
<record>
<hd h01="728" ... />
<tr t01="12" ... />
<tr t01="16" ... />
<tl t01="9" ... />
</record>
<record>
<hd h01="0" ... />
<tr t01="33" ... />
<tl t01="2" ... />
</record>
</root>
每个“记录”将有一个<hd>,一个或多个<tr>,以及一个<tl>,完全按照这个顺序。
我想unmarshal 它使用以下模型类:
@XmlRootElement(name = "root")
public class RootXml {
@XmlElement(name = "record")
private RecordXml record;
.
@XmlRootElement(name = "record")
public class RecordXml {
@XmlElement(name="hd")
private HdXml hd;
@XmlElement(name="tr")
private List<TrXml> tr;
@XmlElement(name="tl")
private TlXml tl;
但为此,我必须将每个“记录”分组到 <record> 标记中。
如何在 Java 中做到这一点?
首先我想到了这样的硬编码解决方案:
xmlString = xmlString.replaceAll("<hd", "<record><hd");
但后来我陷入了如何插入记录的结束标记的问题上,一旦它应该放在<tl> 标记之后,该标记具有很多属性,例如<tl t01="2" t02="234" ... />。
我认为最好的解决方案可能是使用 XML 的 Document 对象。
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
但我不知道该怎么做。
欢迎任何想法。
【问题讨论】:
标签: java xml dom xml-parsing unmarshalling