1. 概述编辑
1.1 版本
FineDataLink 版本 | 功能变动 |
---|---|
4.0.9 | 新增「XML解析」 |
1.2 应用场景
对于RestAPI、WebService、OData接口中响应数据返回的 XML 格式数据、来自 XML 文件的数据,用户想要将其解析为行列格式数据,以供后续加工存储。
demo示例详情参见:https://demo.finedatalink.com/ 「01.功能示例>01最新功能>4.0.9 xml解析」
1.3 功能说明
FineDataLink 支持在数据转换中使用 XML 解析将XML格式数据解析为行列格式数据,以供后续加工存储。
2. 操作步骤编辑
2.1 API 取出 XML 格式数据
请阅读 RestAPI输入-webservice ,在数据转换节点中通过 API 取数获取到 XML 格式数据。
预览界面获取 API 取出的 XML 数据,如下图所示:
2.2 解析 XML 数据
在数据转换节点,新增 XML 解析,并与上游 RestAPI 输入连接,如下图所示:
选择源字段,并勾选是否在解析后保留所有上游输出字段,如下图所示:
如果有命名空间,则需要指定才能获取正确节点,例如下面的前缀则需要填写 xsi、xsd、soap等等,然后填写对应的 URI,在指定命名空间后,带有前缀的节点名可以被正确识别,如下图所示:
「解析配置」说明:
配置项 | 类型 | 说明 |
---|---|---|
选择源字段 | 下拉框 默认为空 | 下拉列表内容说明:所有前置字段名。 |
解析后保留所有上游输出字段 | 勾选框 默认不勾选 | 勾选后,将所有上游输出字段与解析产生的新字段合并输出。 |
指定命名空间 | 勾选框 | 若 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。 |