历史版本10 :XML解析算子 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

FineDataLink 版本功能变动
4.0.9

新增「XML解析」

1.2 应用场景

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

demo示例详情参见:https://demo.finedatalink.com/ 「01.功能示例>01最新功能>4.0.9 xml解析」

1.3 功能说明

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

2. 操作步骤编辑

2.1  API 取出 XML 格式数据

请阅读 RestAPI输入 ,在数据转换节点中通过 API 取数获取到 XML 格式数据。

预览界面获取 API 取出的 XML 数据,如下图所示:

2.2 解析 XML 数据

在数据转换节点,新增 XML 解析,并与上游 RestAPI 输入连接,如下图所示:

选择源字段,并勾选是否在解析后保留所有上游输出字段,如下图所示:

如果有命名空间,则需要指定才能获取正确节点,例如下面的前缀则需要填写 xsi、xsd、soap等等,然后填写对应的 URI,在指定命名空间后,带有前缀的节点名可以被正确识别,如下图所示:

「解析配置」说明:

配置项
类型
说明
选择源字段

下拉框

默认为空

下拉列表内容说明:所有前置字段名。

解析后保留所有上游输出字段

勾选框

默认不勾选

勾选后,将所有上游输出字段与解析产生的新字段合并输出。

指定命名空间

勾选框

若 XML中带有命名空间,需要指定命名空间才能正确读取到节点。

注:命名空间前缀不可以重名,如果文件里的命名空间前缀确实有重名的情况,需要改为不重名,然后根据修改后的值,在选择XML节点那里选择正确的节点(会按照重命名后的前缀显示节点)。

选择XML节点

按钮

读取第一行非空XML数据作为模板,解析出的所有可选的XML路径。

注:只有末端节点支持选中。

点击「选择 XML 节点」,勾选需要解析的节点,点击确定,如下图所示:

选择XML节点完毕后,已选内容填入「输出字段」表格中,在表格中显示解析后的字段名称及XPath路径。

表格字段
类型
说明
XPath路径可编辑文本框

配置解析后字段的XPath路径表达式。

不允许引用参数。

允许手写手写XPath路径。

注:支持的路径类型详情参见本文第三节。

解析后字段名称

可编辑文本框

配置解析后的字段名称。

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

注2:不允许引用参数。

点击数据预览,即可看到解析后的数据,如下图所示:

2.3 数据同步

使用 DB表输出将加工后的数据同步至数据库,如下图所示:

3. 补充说明编辑

FDL 中支持的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>

3.1 选取节点

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

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

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

选取根元素 bookstore。

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

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

3.2 谓语

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

谓语被嵌在方括号中。

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

路径表达式结果
/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。