Java:修复子组中格式错误的XML分组标记
我有以下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");
但后来我陷入了如何插入record的close标记的困境,一旦它应该放在<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)));
但我不知道如何继续
任何想法都会受到欢迎
# 1 楼答案
我能够用硬编码解决方案修复XML:
这肯定不漂亮,但我找不到更好的解决办法
# 2 楼答案
在XSLT 2.0中非常简单:
除非你有足够的时间,否则不要尝试用Java写这篇文章