我有以下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>
每个“记录”将按此顺序具有一个 ,一个或多个和一个 。
我想要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;
但是为此,我必须将 标签中的每个“记录”分组。
如何用Java做到这一点?
首先,我想到了这样的硬编码解决方案:
xmlString = xmlString.replaceAll("<hd", "<record><hd");
但是,当我将其放置在 具有很多属性(如)的标签之后时,我就继续着手如何插入记录的close标签<tl t01="2" t02="234" ... />。
我认为最好的解决方案可能是使用DocumentXML对象。
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
但我不知道该如何进行。
任何想法都将受到欢迎。
在XSLT 2.0中非常简单:
<xsl:template match="root">
<xsl:for-each-group select="*" group-starting-with="hd">
<record>
<xsl:copy-of select="current-group()"/>
</record>
</xsl:for-each-group>
<xsl:template>
除非您有足够的时间,否则不要尝试用Java编写代码。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。