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