EvaluateXQuery

文档中心 › 组件索引 › EvaluateXQuery

EvaluateXQuery Processor

类型全限定名:cn.org.acal.lynxus.processors.standard.EvaluateXQuery

所属 Bundle:cn.org.acal.lynxus:lynxus-standard-nar:2.11.8

描述

对 FlowFile 的内容计算一个或多个 XQuery 表达式。

标签

XMLevaluateXPathXQuery

属性

下表中,加粗的属性为必填项;其余为可选项。表格同时标注默认值、是否支持表达式语言,以及是否为敏感属性(值会被加密)。

名称默认值可选值描述
Destinationflowfile-content
  • flowfile-content
  • flowfile-attribute
指示 XQuery 求值的结果是写入 FlowFile 内容还是 FlowFile 属性。如果设置为 <flowfile-content>,则只能指定一个 XQuery,属性名称将被忽略。如果设置为 <flowfile-attribute> 且 XQuery 返回多个结果,则将在 FlowFile 上添加多个属性,每个属性名称在指定的属性名称后附加 '.n' 递增编号。
Output: Methodxml
  • xml
  • html
  • text
标识应该用于输出结果树的总体方法。
Output: Omit XML Declarationfalse指定处理器在转换结果树时是否应输出 XML 声明。
Output: Indentfalse指定处理器在输出结果树时是否可以添加额外的空格。
Allow DTDfalse
  • true
  • false
允许 XML 中嵌入文档类型声明。应禁用此功能以避免 XML 实体扩展漏洞。

动态属性

动态属性允许用户自定义属性的名称与值。

名称值描述
一个 FlowFile 属性(如果 <Destination> 设为 'flowfile-attribute')一个 XQuery如果 <Destination>='flowfile-attribute',则 FlowFile 属性将设置为 XQuery 的计算结果。如果 <Destination>='flowfile-content',则 FlowFile 内容将设置为 XQuery 的计算结果。

关系 (Relationships)

名称描述自动终止
failure当无法对 FlowFile 的内容进行 XQuery 求值时,FlowFile 被路由到此关系。否
matched当 XQuery 成功求值且 FlowFile 因此被修改时,FlowFile 被路由到此关系否
unmatched当 XQuery 不匹配 FlowFile 的内容且目标设置为 flowfile-content 时,FlowFile 被路由到此关系否

写入的 FlowFile 属性

名称描述
user-defined如果 <Destination> 属性设置为 flowfile-attribute ,则此处理器会添加用户定义的属性。

状态管理

该组件不存储状态。

受限 (Restricted)

该组件不受限。

输入要求

该组件要求有传入连接。

系统资源考量

资源描述
MEMORY处理需要将整个 FlowFile 读入内存

详细说明

EvaluateXQuery

示例:

此 Processor 会为每个 XQueryResult 产生一个 Attribute 或 FlowFile。如果只希望得到一个 Attribute 或 FlowFile,下面的示例演示了如何用 XQuery 语言实现。以下示例引用这段示例 XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="foo.xsl"?>
<ns:fruitbasket xmlns:ns="http://namespace/1">
    <fruit taste="crisp">           <!-- Apples are my favorite-->
        <name>apple</name>
        <color>red</color>
    </fruit>
    <fruit>
        <name>apple</name>
        <color>green</color>
    </fruit>
    <fruit>
        <name>banana</name>
        <color>yellow</color>
    </fruit>
    <fruit taste="sweet">
        <name>orange</name>
        <color>orange</color>
    </fruit>
    <fruit>
        <name>blueberry</name>
        <color>blue</color>
    </fruit>
    <fruit taste="tart">
        <name>raspberry</name>
        <color>red</color>
    </fruit>
    <fruit>
        <name>none</name>
        <color/>
    </fruit>
</ns:fruitbasket>
  • 逐个返回所有 "fruit" 节点的 XQuery(7 个结果):

    • //fruit]
  • 只返回第一个 "fruit" 节点的 XQuery(1 个结果):

    • //fruit[1]
  • 只返回最后一个 "fruit" 节点的 XQuery(1 个结果):

    • //fruit[count(//fruit)]
  • 返回所有 "fruit" 节点并包裹在 "basket" 标签中的 XQuery(1 个结果):

    • {//fruit}
  • 逐个返回所有 "fruit" 名称的 XQuery(7 个结果):

    • //fruit/text()
  • 只返回第一个 "fruit" 名称的 XQuery(1 个结果):

    • //fruit[1]/text()
  • 只返回最后一个 "fruit" 名称的 XQuery(1 个结果):

    • //fruit[count(//fruit)]/text()
  • 以逗号分隔列表返回所有 "fruit" 名称的 XQuery(1 个结果):

    • string-join((for $x in //fruit return $x/name/text()), ', ')
  • 以逗号分隔列表返回所有 "fruit" 的颜色和名称的 XQuery(1 个结果):

    • string-join((for $y in (for $x in //fruit return string-join(($x/color/text() , $x/name/text()), ' ')) return $y), ', ')
  • 以逗号分隔列表返回所有 "fruit" 的颜色和名称的 XQuery(1 个结果):

    • string-join((for $y in (for $x in //fruit return string-join(($x/color/text() , $x/name/text()), ' ')) return $y), ', ')
  • 以换行分隔列表返回所有 "fruit" 的颜色和名称的 XQuery(1 个结果):

    • string-join((for $y in (for $x in //fruit return string-join(($x/color/text() , $x/name/text()), ' ')) return $y), '\n')