能否在XML数据导入模板中直接配置规则过滤指定数据行?
需求背景
当前通过XML映射模板完成结构化数据到目标软件的导入,现有导入流程运行正常,需要新增行级过滤规则:直接排除第3列(映射对应Col3/Column3)不包含「ID」关键词的数据行,仅保留符合规则的行完成导入。
当前使用的XML模板原始代码如下:
<collection name="XXXXX" mapTo="YYYYY"> <collection name="xxxxxx" mapTo="yyyyyy"> <row name="Information" mapTo="Info"> <column type="String" name="Col1" mapTo="Column1"/> <column type="String" name="Col2" mapTo="Column2"/> <column type="String" name="Col3" mapTo="Column3"/> </row> </collection> </collection>
可行实现方案
方案1:XML模板内直接配置过滤规则(优先选择,无需调整现有导入流程)
绝大多数支持XML映射配置的数据导入引擎(含各类系统自带导入模块、通用ETL工具)都原生支持行级过滤配置,直接在<row>节点上增加过滤规则即可,不需要额外开发。
通用配置示例如下:
<collection name="XXXXX" mapTo="YYYYY"> <collection name="xxxxxx" mapTo="yyyyyy"> <!-- 新增过滤规则:仅保留Col3字段包含"ID"关键词的数据行 --> <row name="Information" mapTo="Info" filter="contains(Col3, 'ID')"> <column type="String" name="Col1" mapTo="Column1"/> <column type="String" name="Col2" mapTo="Column2"/> <column type="String" name="Col3" mapTo="Column3"/> </row> </collection> </collection>
*不同导入引擎的过滤语法存在小幅差异,如果上述contains()写法不生效,可以根据目标软件的配置规范替换为对应语法,常见兼容写法包括:
- 支持SQL类语法的引擎:
filter="Col3 like '%ID%'" - 支持正则匹配的引擎:
filter="Col3 matches '.*ID.*'" - 要求独立过滤节点的引擎:在
<row>节点下新增子节点<filter condition="Col3 contains 'ID'"/>即可,其余列映射配置保持不变。
方案2:导入前增加轻量数据过滤步骤
如果测试确认当前使用的目标软件XML模板不支持内置过滤规则,不需要改动现有模板和后续导入逻辑,只需要在原始数据读取后、传入XML映射模块前增加一步简单过滤:遍历所有待导入行,直接丢弃第3列不含「ID」的行,将过滤后的数据集传入原有导入流程即可,实现成本极低,过滤性能和模板内置过滤无差异。
内容的提问来源于stack exchange,提问作者PythonCharles
相关产品推荐
相关产品推荐

