XML解析算子

  • 产品级协助
  • 文档创建者:Roxy
  • 历史版本:25
  • 最近更新:Wendy123456 于 2025-04-24
  • 1. 概述

    1.1 版本

    FineDataLink 版本功能变动
    4.0.9

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

    4.2.5.4

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

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

    2)上游节点为 API 输入且数据未展开为二维表时,源字段默认为 responseBody

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

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

    5)支持解析非末端节点

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

    7)解决多层拆块问题

    8)优化新增删除节点逻辑

    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.2.5.4 之前版本,源字段默认为 default。

    • 4.2.5.4 及之后版本,源字段默认为 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、ge

    不支持同时选中:

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

    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解析示例



    附件列表


    主题: 数据开发-定时任务
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    7s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持

    反馈已提交

    网络繁忙