最新历史版本 :XML解析算子 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:
[helpvideo]8609[/helpvideo]

目录:

1. 概述编辑

1.1 版本

FineDataLink 版本功能变动
4.0.9

新增「XML解析」算子,可以将输入的 XML 数据解析为行列形式的数据

4.2.5.4

「XML解析」算子设置项中:

1)去掉命名空间设置项,该设置项说明请参见历史版本文档

2)XML 语句中支持包含一些不合法字符

3)支持自动获取 XML 文件的命名空间前缀命名空间URL

4)支持解析非末端节点

5)可批量去除解析后字段名称中的空间前缀

6)解决多层拆块问题

7)若已选择节点,再次选择 XML 节点时,新选择的节点按弹窗中的顺序在原本已有字段的下方添加,如果弹窗中取消选择了已有节点,从原本已有节点中删除;4.2.5.4 之前版本再次选择 XML 节点是整体覆盖逻辑,影响用户体验

1.2 应用场景

对于 API、WebService、OData 接口中响应数据返回的 XML 格式数据、来自 XML 文件的数据,用户想要将其解析为行列格式数据,以供后续加工存储。

1.3 功能简介

FineDataLink 支持在「数据转换」中使用「XML解析」算子将 XML 格式数据解析为行列格式数据,以供后续加工存储。

11.png

1.4 兼容说明

4.2.5.4 之前版本,非同一层级下的节点同时被选中解析时,会各自生成解析结果,未解析到的字段补 NULL,结果做UNION。如下图所示:

39.png

情况一:

用户使用多个 XML 解析分层解析数据,并通过其他算子进行拼接,若升级到 4.2.5.4 及之后版本,不会产生兼容性问题。

情况二:

使用一个 XML 解析算子解析后,通过不同的筛选把数据分成两部分,或者使用 SparkSQL 实现其他操作,若升级到 4.2.5.4 及之后版本,会产生兼容性问题,需要调整任务。

2. 功能说明编辑

「XML解析」算子配置界面如下图所示:

25.png

2.1 选择源字段

1)下拉列表内容为所有前置字段名。

2)上游节点为 API 输入且数据未展开为二维表时:

  • 4.1.1 之前版本,源字段默认为 default。

  • 上游节点 API 输入算子为 4.1.1 及之后版本新建的,源字段默认为 responseBody。

3)解析后保留所有上游输出字段按钮:勾选后,将所有上游输出字段与解析产生的新字段合并输出。

4)4.2.5.4 及之后版本,XML 语句中包含下面所示字符能正常解析不报错;

\u0000-\u0008: ASCII 码 0-8,包括:NUL(空字符)、SOH(标题开始)、STX(正文开始)、ETX(正文结束)、EOT(传输结束)、ENQ(请求)、ACK(确认)、BEL(响铃)、BS(退格)
\u000B: ASCII码11,即 VT(垂直制表符)
\u000C: ASCII码12,即 FF(换页符)
\u000E-\u001F: ASCII码 14-31

2.2 命名空间声明

26.png

2.2.1 4.2.5.4 之前版本

详情请参见:历史版本

2.2.2 4.2.5.4 及之后版本

前提条件
说明
选择源字段后&&XML 文件格式正确&&XML 文件中有命名空间自动获取 XML 文件的命名空间前缀命名空间URL
选择源字段后&&XML 文件格式正确&&XML 文件中无命名空间提示没有命名空间

命名空间前缀命名空间URL」说明如下表所示:

字段名
说明
命名空间前缀

1)支持修改、重新获取(4.2.5.4 及之后版本支持;点击后,先清空已有内容,再重新获取)、新增和删除操作;修改时,需注意:命名空间前缀将影响相关XML节点的XPath路径,请谨慎修

2)若获取到的命名空间无前缀,则给默认值default、default1、default2......进行命名

3)不允许重名,不能为空

命名空间URL

1)支持修改、重新获取4.2.5.4 及之后版本支持;点击后,先清空已有内容,再重新获取新增和删除操作

2)允许重复

2.3 解析 XML 数据

2.3.1 选择 XML 节点

点击「选择XML节点」按钮后,弹出XML节点选择框。

数组节点说明:同一层级的多个标签,因同名而被聚合成一个节点,解析后会有多行数据。

包含数组的 XML 示例数据:
31.png

38.png

4.2.5.4 之前版本:

只能选择末端节点,非末端节点不能选中。详细说明请参见:历史版本

4.2.5.4 及之后版本:

场景
说明
选择节点

1)支持选择非末端节点和末端节点(末端节点定义:没有子节点;下图黄色字段为末端节点,剩下的字段为非末端节点

1745473846893780.png

2)选中非末端节点后,对应字段以字符串形式取节点内部 XML

示例:选 xml 节点时选择 friendlist 生成的 XPath 需要是红框部分的路径,字段对应值为红框部分的字符串形式

1745475166479259.png

3)支持同时选中:

  • 有从属关系的节点:例如下图中的 friendlist 和 name

  • 同一数组下的同层级节点:例如下图中的 name、city

不支持同时选中:

已选某数组节点或其子节点,则不能选择其他数组或其他子节点

1745478931145670.png

选择的不是同一层的 XML 节点时

数据预览和实际运行时,对数据进行拼行处

场景
示例效果
输出字段中的多个节点,均为同级同父节点时31.png32.png
输出字段中的多个节点,为同一个父节点下的子节点以及父节点的属性33.png

父节点的属性视作为该父节点的一个子节点,和其他子节点同级处

34.png

对于输出字段中的多个节点,包含不同级节点时31.png

进行拼行处理,如果有1对n的数据,按照n的部分扩展行;如果有1:N1:N2的数据,按N2的部分扩展N1再扩展1

36.png

注1:如果把bstfri中的name和city选中直接在上面加两列,这两列的三行每行都是judy sh

注2:如果解析的XPath路径中有非末端节点(比方说bstfri节点),扩展成三行,每行值相同,对应字段以字符串形式取节点内部XML(包含当前节点本身,否则XML格式可能不合法)

注3:父节点的属性节点在该种情形下同样视作父节点的子节点,然后根据子节点逻辑进行处理


「解析后字段名称」已存在,再次点击「选择XML节点」按钮时
新选择的节点按弹窗中的顺序在原本已有字段的下方添加,如果弹窗中取消选择了已有节点,从原本已有节点中删除

2.3.2 输出字段

29.png

列表项允许新增、删除、清空(4.2.5.4 及之后版本)。

经过 XML 解析产生的字段类型统一为字符串(从上游带来的字段类型不变)。

字段名
说明
解析后字段名称可编辑;配置解析后的字段名称

注1:字段名称不允许重名

注2:不允许引用参数

XPath 路径1)可编辑;展示&配置解析后字段的 XPath 路径表达式

2)不允许引用参数

3)若需解析「选择XML节点」无法生成的路径,可点击添加字段按钮并手动填写 XPath 路径

去除字段名的命名空间前缀

点击1745474558335260.png按钮,可去除字段名的命名空间前缀。如下图所示:

29.png

去除逻辑:

1)识别命名空间前缀(前缀必须在命名空间声明里出现)

2)如果清除命名空间前缀会导致字段名重复,则保留原本的前缀不去除

手写 XPath 支持的类型:「选取节点」类和「谓语」类

例如 XML 文档如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果
bookstore选取 bookstore 元素的所有子节点。
/bookstore

选取根元素 bookstore。

注:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径。

bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

谓语

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00

3. 特殊场景处理策略编辑

场景
处理策略

源XML数据存在多个根元素,举例:

1685427389170899.png

点击「选择XML节点」时报错:XML数据根节点缺失

自行写XPath,预览及运行时报错:XML数据根节点缺失

配置的XPath不正确解析出的字段内容为空

配置的XPath非法

或者

命名空间前缀中填写了非英文字母的字符

抛出解析异常

命名空间前缀重复

9.png

命名空间前缀不可重复

此例中,将两个 s 中的一个重命名为其他名称,并正常填写对应 URI ,通过树选的形式可正常解析

如果是手填路径,需要按照重命名后的命名空间前缀书写路径

源XML数据不完整,举例:

1685427733248711.png

点击选择XML节点时报错:XML数据格式不完整

自行写XPath,预览及运行时报错:XML数据格式不完整

4. 示例编辑

「XML解析」算子使用示例请参见:XML解析示例