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

简介

通过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>

转换步骤截图

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

转换步骤

  • XML输入:

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

XML输入

  • 过滤记录-排除END_ELEMENT标签:

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

过滤记录-排除END_ELEMENT标签

  • JAVA代码实现行数据group:

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

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;

}

  • 过滤无用标签:

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

过滤无用标签

  • 列转行:

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

列转行

  • 过滤无用字段:

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

过滤无用字段

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

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

推荐阅读