kettle从入门到精通 第八十四课 ETL之kettle kettle中Get data from XML使用实战教程

news/2025/3/15 4:08:35/文章来源:https://www.cnblogs.com/zjBoy/p/18339362

场景:解析xml文件或者内容解析出其中某些字段。

 本来想着这个步骤使用起来比较简单,就没有梳理成文,结果群里的小伙伴为了使用这个步骤折腾了一下午。故有了此文。

在开始学习之前我们一起来学习下xml命名空间的相关知识,为下文展开做基础铺垫。

1、xml命名空间

XML 的命名空间(namespace)是为了解决在 XML 文档中使用相同元素或属性名称时可能出现的冲突问题。它提供了一种机制来区分和唯一标识不同来源的元素和属性,从而避免命名冲突。
文档1(未使用命名空间)
<book><title>Introduction to XML</title><value>123</value>
</book>

文档2(未使用命名空间)

<product><name>XML Book</name><value>$50</value>
</product>

在文档1和文档2中,<value> 元素在两个文档中都有定义,但它们的含义是不同的。在没有命名空间的情况下,如果你尝试将这两个文档合并,或者在处理它们时可能会遇到冲突,因为 <value> 元素的上下文不明确。

文档1(使用命名空间)

<book xmlns:bk="http://www.example.com/book"><bk:title>Introduction to XML</bk:title><bk:value>123</bk:value>
</book>

文档2(使用命名空间)

<product xmlns:pr="http://www.example.com/product"><pr:name>XML Book</pr:name><pr:value>$50</pr:value>
</product>

在这些文档中,bk:value 和 pr:value 具有不同的命名空间,因此它们是完全不同的元素,即使它们的本地名称相同。这样就避免了名称冲突,并且每个元素的含义都被明确标识。

2、了解了xml命名空间的作用,我们言归正传,继续学习如何使用Get data from XML步骤。xml文件内容如下:
 
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header/>
<soapenv:Body>
<ns:loginResponse xmlns:ns="http://webservice.zhending.com">
<ns:return>{"result":"success","data":{"inputOrganCode":"aaa","inputOrganName":"bbbb","userIdcard":"cccc","userName":"ddd","token":"eeee"},"message":"操作成功"}</ns:return>
</ns:loginResponse>
</soapenv:Body>
</soapenv:Envelope>

3、拖动步骤【Get data from XML】、【写日志】两个步骤到画布中并连线,如下图所示:

 4、按照下图所示,点击按钮【浏览】选中文件demo.xml,然后点击按钮【增加】

 5、点击最下面的按钮【预览】,弹出提示要设置开始循环的xmlpath。

 6、切换到内容tab,点击按钮【获取XML文档的所有路径】,弹窗会列出xml文件中的所有path,我们根据自己的要求选择一个path,这里我们选择第一个根path。

 7、设置循环读取路径,切换到字段tab我们继续设置要提取的字段。这里直接点击按钮【获取字段】即可自动填充xml文件中的字段,可以根据填充的内容以及自己的实际应用场景进行微调。

 8、保存&运行,运行报错,如下图所示:

 

错误信息:

Exception occurred evaluting XPath: soapenv:Body/ns:loginResponse/ns:return. Exception: XPath expression uses unbound namespace prefix ns。

错误信息翻译:

异常发生在评估 XPath 时:soapenv:Body/ns:loginResponse/ns:return。异常:XPath 表达式使用了未绑定的命名空间前缀 ns。

9、kettle如果连命名空间都处理不了那就太弱了,继续寻找配置参数。切换到内容tab,将考虑命名空间勾选。保存&运行,转换正常运行。如下图所示:

注意:若xml文件内容或者xml文本没有使用命名空间的话就不用勾选此参数。

 10、上面的例子只是解决了从xml文件中读取,稍加改造支持从前置步骤读取xml文本内容。本次示例通过步骤【生成记录】生成xmlCont字段,当然也可以来源于http/https结果字段等,如下图所示:

 

11、根据下图所示,勾选参数XML源定义在一个字段里和选择XML源字段名,其他保持不变。保存&运行,转换可以正确运行。

 12、这里如果是xml文本,依然可以使用步骤自动生成xmlpath,切换到字段tab,点击按钮获取字段,将xml文本粘贴到文本框&然后点击确定即可自动填充xmlpath。如下图所示:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778323.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双边滤波

双边滤波(Bilateral Filtering)是一种非线性的图像处理方法,主要用于图像的平滑同时保持边缘清晰。与传统的低通滤波器(如均值滤波或高斯滤波)不同,双边滤波不仅考虑了空间上的邻近性,还考虑了像素值的相似性,这使得它能够在去除噪声的同时较好地保留图像的边界和细节。…

用项目详细讲讲vue3路由

1.【对路由的理解】 Vue Router 是 Vue.js 官方的路由管理器,它用于构建单页面应用(SPA),允许我们在不同的页面间进行导航,而无需刷新整个页面。 路由配置文件代码如下:import {createRouter,createWebHistory} from vue-router import Home from @/pages/Home.vue impo…

多态的概念,前提,注意事项以及访问成员的特点 day09

多态:某一个事物在不同状态下的多种状态举例:1、学生是人,老师是人,医生是人。2、汽态的水是水,固态的水是水,液态的水是水在java中要实现多态的话,需要有3个前提:1、必须要有继承关系2、要有方法的重写(思考可否不重写?)不是必须要重写的,重写可以体现子类的专属特…

[vue3] vue3初始化渲染流程

本文解析了 Vue3 组件初次渲染的流程,涵盖应用程序初始化、核心渲染步骤,以及 vnode 的创建和渲染,探讨了 Vue3 内部机制及其跨平台实现的关键细节。组件初次渲染流程 组件是对DOM树的抽象,组件的外观由template定义,模板在编译阶段会被转化为一个渲染函数,用于在运行时生…

[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-03 GPIO PS/PL实验

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1 概述本…

2024/8/5笔记

字符串专题 1 暑假二南集训 day1 A - GT考试 洛谷 - P3193 [HNOI2008] GT考试 题目描述 阿申准备报名参加 GT 考试,准考证号为 \(N\) 位数\(X_1,X_2…X_n\ (0\le X_i\le 9)\),他不希望准考证号上出现不吉利的数字。 他的不吉利数字\(A_1,A_2,\cdots, A_m\ (0\le A_i\le 9)\) …

[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-02 FPSoc程序固化入门

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述在…

[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-01 FPSoc开发入门

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述1.…

maven 中 scope标签的作用以及引入本地jar包打包方法

1. scope标签的作用2、使用system标签 项目三方jar存放位置结构:pom.xml中引入三方jar: <dependency><groupId>test</groupId><artifactId>testa</artifactId><version>0.0.1</version><scope>system</scope><syst…

强大的USB协议分析工具

2020年最后一天了,感谢大家一年来对我文章的支持,有你们的支持就是我强大的动力。 今天来给大家介绍一个USB 协议分析软件LeCroy USB Advisor,软件安装包下载连接如下: 链接:https://pan.baidu.com/s/12qBCOjuy4i8kr1MHjBrfYQ 提取码:2rpx 这个软件对于USB协议学习有很大…

python用弹窗选文件

from tkinter.filedialog import askopenfilename file_path = askopenfilename() 这是我能找到的最简洁版本来源:https://blog.csdn.net/u014769180/article/details/84639775 from tkinter.filedialog import askopenfilenamefile_path = askopenfilename()这是我能找到的最…

D38 2-SAT CF27D Ring Road 2

视频链接:D38 2-SAT CF27D Ring Road 2_哔哩哔哩_bilibili CF27D Ring Road 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)#include <iostream> #include <cstring> #include <algorithm> using namespace std;const int N=205; int n,m,x[N],y[N]; i…