对于etl处理,我有如下所示的xml
<?xml version="1.0"?>
<OMeS version="2.3" adapId="nokrww" xmlns="pm/cnf_rnc_nsn.7.0.xsd">
<PMSetup startTime="2018-10-23T11:00:00.000+05:00:00" interval="15">
<PMMOResult>
<MO dimension="network_element">
<DN><![CDATA[PLMN-PLMN/RNC-3/WBTS-500/WCEL-1]]></DN>
</MO>
<MO dimension="MCCMNC">
<DN><![CDATA[PLMN-PLMN/MCC-4/MNC-5]]></DN>
</MO>
<PMTarget measurementType="L3Iub">
<M1005C0>424</M1005C0>
<M1005C1>858</M1005C1>
</PMMOResult>
<PMMOResult>
<MO dimension="network_element">
<DN><![CDATA[PLMN-PLMN/RNC-3/WBTS-501/WCEL-2]]></DN>
</MO>
<MO dimension="MCCMNC">
<DN><![CDATA[PLMN-PLMN/MCC-5/MNC-6]]></DN>
</MO>
<PMTarget measurementType="L3Iub">
<M1005C0>201</M1005C0>
<M1005C1>300</M1005C1>
</PMMOResult>
</PMSetup>
</OMeS>如果我将PMMOResult用于fragmentRootElementName,则无法访问startTime属性。
如果我使用OMes作为fragmentRootElementName,我只需要编写一项
如何重写StaxEventItemReader以使用OMeS作为fragmentRootElementName读取整个文档,然后访问PMMOResult标记下的所有嵌套元素,进行一些更改并以列表形式返回?
发布于 2018-10-29 08:25:29
这不可能。StaxEventItemReader一次只能读取一种类型(从项目读取器的基本契约:ItemReader<T>)。将fragmentRootElementName设置为PMSetup以获取startTime属性是可能的,但最终会在内存中得到一个包含所有PMMOResult子元素的巨大的PMSetup元素项,这不是您想要的。
因此,我建议分两步进行:
PMMOResult元素,方法是将fragmentRootElementName设置为StaxEventItemReader中的PMMOResult希望这能有所帮助。
https://stackoverflow.com/questions/53039398
复制相似问题