EvaluateXQuery Processor
描述
对 FlowFile 的内容计算一个或多个 XQuery 表达式。
标签
属性
| 名称 | 默认值 | 可选值 | 描述 |
|---|---|---|---|
| Destination | flowfile-content |
| 指示 XQuery 求值的结果是写入 FlowFile 内容还是 FlowFile 属性。如果设置为 <flowfile-content>,则只能指定一个 XQuery,属性名称将被忽略。如果设置为 <flowfile-attribute> 且 XQuery 返回多个结果,则将在 FlowFile 上添加多个属性,每个属性名称在指定的属性名称后附加 '.n' 递增编号。 |
| Output: Method | xml |
| 标识应该用于输出结果树的总体方法。 |
| Output: Omit XML Declaration | false | 指定处理器在转换结果树时是否应输出 XML 声明。 | |
| Output: Indent | false | 指定处理器在输出结果树时是否可以添加额外的空格。 | |
| Allow DTD | 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')