开发者社区> 问答> 正文

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>

每个“记录”将按此顺序具有一个 ,一个或多个和一个 。

我想要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)));

但我不知道该如何进行。

任何想法都将受到欢迎。

展开
收起
垚tutu 2019-12-12 09:54:50 1087 0
1 条回答
写回答
取消 提交回答
  • #include

    在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编写代码。

    2019-12-12 09:55:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载