简介
通过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
转换步骤截图

转换步骤XML输入:

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

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

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;
}过滤无用标签:

过滤无用标签列转行:

列转行过滤无用字段:

过滤无用字段
xml文档和ktr文件下载路径:
https://download.csdn.net/download/wwwww9061/11132783