У меня есть следующий 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" ... />
.
Я думаю, что, возможно, лучшим решением было бы использование Document
объекта XML.
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
Но я не знаю, как поступить.
Любые идеи могли быприветствовать.