java 多级嵌套xml文件夹,kettle解析多层分组嵌套XML,完整解析案例(包含xml、ktr文件)-xml文件...

简介

通过ETL kettle获取XML中的数据,采用XML Input Stream (StAX) 方法实现将多层分组嵌套XMl中数据读出来,将非结构化数据结构化,并可以直接存入关系型数据库中。本文通过完整解析案例(包含xml、ktr文件),手把手教你获取XML中数据。废话不多说,开始直接干。

XML文件内容

一种双密封悬臂梁式传感器流量计结构

本发明提出了一种双密封悬臂梁式传感器流量计结构。

发明专利申请公布

发明专利申请公布

A

null

20111208

20180104

CN201221121

CN102311Q

中国

null

2018-06-11 19:13:05.0

2018-06-11 19:13:05.0

一种镜头分光束光电测角装置及其检测方法

本发明公开了一种镜头分光束光电测角装置及其检测方法。

发明专利申请公布

发明专利申请公布

A

null

20160223

20160504

CN2011211

CN102121W

中国

null

2018-06-11 19:13:05.0

2018-06-11 19:13:05.0

转换步骤截图

f064cb2727638ad4d55e601ff3341e90.png

转换步骤XML输入:

9ff2cc5cc704e5c1ed9449ae47ade425.png

XML输入过滤记录-排除END_ELEMENT标签:

fb9458ba7bdf2564b047d275e5ee2425.png

过滤记录-排除END_ELEMENT标签JAVA代码实现行数据group:

c8f5648c82ddb5a62de6c79fb8aa7b74.png

private int pos_xml_element_level;

private int pos_group;

private int group=1;

private static final int LEVEL_CHECK=2;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException

{

Object[] r=getRow();

if (r==null)

{

setOutputDone();

return false;

}

if (first) {

// get field positions (input)

pos_xml_element_level = getInputRowMeta().indexOfValue("xml_element_level");

// get field positions (output)

pos_group = data.outputRowMeta.indexOfValue("group");

if (pos_xml_element_level<0 || pos_group<0 ) {

throw new KettleException("One of the xml_ fields or output fields was not found.");

}

first=false;

}

if ((Long)r[pos_xml_element_level]==LEVEL_CHECK) {

group=group*(-1);

}

Object[] outputRowData = createOutputRow(r, data.outputRowMeta.size());

outputRowData[pos_group]=new Long(group);

putRow(data.outputRowMeta, outputRowData);

return true;

}过滤无用标签:

b0f4e2275de06a719d87e4349b1b25e9.png

过滤无用标签列转行:

904306be81451abcaa6db61cb582899e.png

列转行过滤无用字段:

141cad07d81e022c3a5dac817446020e.png

过滤无用字段

xml文档和ktr文件下载路径:

https://download.csdn.net/download/wwwww9061/11132783