【问题标题】:Generating Header fields in XML file by BeanIO通过 BeanIO 在 XML 文件中生成 Header 字段
【发布时间】:2019-01-10 16:25:54
【问题描述】:

我正在尝试生成以下 xml 文件,它有 2 个字段作为 Header 和重复部分“rec”节点:

<?xml version="1.0" encoding="UTF-8"?>

<transaction>

<createDate>20160708</createDate>
<dlrCode>100<dlrCode/>

<rec>
    <processDate>20190108</processDate>
    <srcID/>10<srcID/>
</rec>
<rec>
    <processDate>20190108</processDate>
    <srcID/>11<srcID/>
</rec>
<rec>
    <processDate>20190108</processDate>
    <srcID/>12<srcID/>
</rec>

</transaction>

这是我创建的映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<beanio xmlns="http://www.beanio.org/2012/03"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

 <stream name="dist" format="xml" xmlName="transaction" >
     <record name="HeaderRecord" class="com.myPackage.HeaderRecord" minOccurs="1" maxOccurs="1" order="1" > 
        <field name="createDate" format="yyyyMMdd" />
        <field name="dlrCode" />
    </record>
    <record name="DisRecord" class="com.myPackage.Record" minOccurs="0" maxOccurs="unbounded" xmlName="rec" order="2">
        <field name="processDate" format="yyyyMMdd"/>
        <field name="srcID"/> 
    </record>
 </stream>
</beanio>

但问题是,它在 HeaderRecord 节点中生成头字段,如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<transaction>

<HeaderRecord>
     <createDate>20160708</createDate>
     <dlrCode>100<dlrCode/>
</HeaderRecord>

<rec>
    <processDate>20190108</processDate>
    <srcID/>10<srcID/>
</rec>
<rec>
    <processDate>20190108</processDate>
    <srcID/>11<srcID/>
</rec>
<rec>
    <processDate>20190108</processDate>
    <srcID/>12<srcID/>
</rec>
</transaction>

映射文件中是否有错误配置?如何达到想要的输出?

【问题讨论】:

  • 我认为您应该向我们展示如何使用BeanWriter 和上述映射文件来实现您的第一个(所需)输出。
  • xml 数据非常庞大,我对 BeanWriter.write(..) 每次重复 POJO(详细信息)进行多次调用,并对标头 POJO 进行一次调用,以避免任何内存不足(堆空间)问题。

标签: java xml-parsing marshalling unmarshalling bean-io


【解决方案1】:

通过使用xmlType="none" 属性,您可以控制是否应生成 xml 元素。当您未指定 xmlName 属性时,xmlName 默认等于记录名称,请参阅here。一条记录将始终映射到一个 xml 元素,并且使用 segments,您可能能够获得所需的输出。

试试这个映射文件:

<stream name="dist" format="xml" xmlType="none" >
  <record name="HeaderRecord" class="com.mypackage.HeaderRecord" minOccurs="1" maxOccurs="1" xmlName="transaction">
    <segment name="dummy" xmlType="none">
      <field name="createDate" format="yyyyMMdd" />
      <field name="dlrCode" />
    </segment>
  </record>

我不认为它是 100% 你在寻找的东西。

【讨论】:

  • 它不会生成我正在寻找的布局, 必须是文件的结尾,但是通过应用此配置,它会在 中创建标题字段,以及 之外的多个
  • 我看不出有任何方法可以在不更改数据结构的情况下仅使用BeanIO 来实现您所要求的。我得到你对堆空间等的关注。它必须是BeanIO吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2023-03-29
  • 2013-06-12
  • 1970-01-01
  • 2017-01-19
相关资源
最近更新 更多