简介
通过ETL kettle获取XML中的数据,采用XML Input Stream (StAX) 方法实现将多层分组嵌套XMl中数据读出来,将非结构化数据结构化,并可以直接存入关系型数据库中。本文通过完整解析案例(包含xml、ktr文件),手把手教你获取XML中数据。废话不多说,开始直接干。
XML文件内容
<?xml version="1.0" encoding="UTF-8"?>
<patents xmlns="http://spec.ckcest.cn/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:schemaLocation="http://spec.ckcest.cn/core CAE_Patent_V1.0.xsd" schema_version="1.0">
<patent_meta>
<title>一种双密封悬臂梁式传感器流量计结构</title>
<alternative/>
<abstract>本发明提出了一种双密封悬臂梁式传感器流量计结构。</abstract>
<abstract_alternative/>
<patent_type>发明专利申请公布</patent_type>
<country_meta>
<country_name>发明专利申请公布</country_name>
</country_meta>
<country_meta>
<Iso3166_twochar>A</Iso3166_twochar>
</country_meta>
<patentee_list/>
<status>null</status>
<application_date>20111208</application_date>
<release_date>20180104</release_date>
<application_number>CN201221121</application_number>
<publication_number>CN102311Q</publication_number>
<application_source>中国</application_source>
<subject_list/>
<reference_list/>
<detail_URI>null</detail_URI>
<admin_meta>
<dataset_id/>
<guid/>
<resource_type/>
<created_time>2018-06-11 19:13:05.0</created_time>
<updated_time>2018-06-11 19:13:05.0</updated_time>
</admin_meta>
</patent_meta>
<patent_meta>
<title>一种镜头分光束光电测角装置及其检测方法</title>
<alternative/>
<abstract>本发明公开了一种镜头分光束光电测角装置及其检测方法。</abstract>
<abstract_alternative/>
<patent_type>发明专利申请公布</patent_type>
<country_meta>
<country_name>发明专利申请公布</country_name>
</country_meta>
<country_meta>
<Iso3166_twochar>A</Iso3166_twochar>
</country_meta>
<patentee_list/>
<status>null</status>
<application_date>20160223</application_date>
<release_date>20160504</release_date>
<application_number>CN2011211</application_number>
<publication_number>CN102121W</publication_number>
<application_source>中国</application_source>
<subject_list/>
<reference_list/>
<detail_URI>null</detail_URI>
<admin_meta>
<dataset_id/>
<guid/>
<resource_type/>
<created_time>2018-06-11 19:13:05.0</created_time>
<updated_time>2018-06-11 19:13:05.0</updated_time>
</admin_meta>
</patent_meta>
</patents>
转换步骤截图
- XML输入:
- 过滤记录-排除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