Создание полей заголовка в файле XML с помощью BeanIO - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь сгенерировать следующий XML-файл, который имеет 2 поля в качестве заголовка и повторяющегося узла "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>

Что-то неправильно настроено в файле сопоставления? Как добиться желаемого результата?

1 Ответ

0 голосов
/ 11 января 2019

Используя атрибут xmlType="none", вы можете контролировать, должен ли быть создан элемент xml или нет. xmlName по умолчанию равно названию записи, если вы не указали атрибут xmlName, см. здесь . Запись всегда будет сопоставлена ​​с элементом xml, и при использовании сегментов вы сможете получить желаемый результат.

Попробуйте этот файл сопоставления:

<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% то, что вы ищете.

...