NiFi:使用 EvaluateXpath 处理器获取 XML 中相同标签的所有元素
NiFi: get all elements of the same tag in XML using EvaluateXpath processor
正在尝试在 NiFi 中解析下面的 xml,并希望解析出所有 ID 并为每个 ID 进行多次 Web 服务调用。
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
</soap:Header>
<soap:Body>
<store-Ids>
<Id>69E32281-0484</Id>
<Id>3002AFCD-B494</Id>
<Id>2C9E17AC-9D97</Id>
<Id>98E8EB10-7D6A</Id>
<Id>F8D5F93C-1455</Id>
<Id>98655C3F-B58C</Id>
<Id>8AE4FD0A-6000</Id>
<Id>E56FE4CA-0D83</Id>
</store-Ids>
</soap:Body>
</soap:Envelope>
有没有办法解析出Id标签中的所有id?作为数组 (69E32281-0484, 3002AFCD-B494................) 或作为字符串 (69E32281-0484 3002AFCD-B4942C9E17AC-9D97.......... ....) 使用 Evaluate-XPath 或 Evaluate-xQuery 处理器?
//*[local-name()='Id']/text() -------- This gives me only the 1st id. and
//*[local-name()='Id'][2]/text() ------- This gives the 2nd id and so on....
//Id -------------------------------- This returns "Empty string set"
因为 ID 的数量将是动态的。无法像 [0]、[1]、[2] 那样对计数器值进行硬编码以获取每个 id 的值。
PS:在 NiFi 中还有许多其他方法可以完成此操作。但是想知道是否有一种方法可以使用 EvaluateXpath 处理器读取 XML 并将所有 id 标记值作为数组或文本获取。
相关链接
目前 EvaluateXPath 仅允许节点集中的单个元素,即使目标是流文件内容也是如此。我已经编写了一个改进的 Jira (NIFI-5187) 来涵盖对具有多个元素的节点集的支持。
作为解决方法,您可以将 EvaluateXQuery 与 //*/Id
结合使用,它会为您的每个 ID 发出一个流文件。然后您可以单独处理每一个,调用您喜欢的任何网络服务。
正在尝试在 NiFi 中解析下面的 xml,并希望解析出所有 ID 并为每个 ID 进行多次 Web 服务调用。
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
</soap:Header>
<soap:Body>
<store-Ids>
<Id>69E32281-0484</Id>
<Id>3002AFCD-B494</Id>
<Id>2C9E17AC-9D97</Id>
<Id>98E8EB10-7D6A</Id>
<Id>F8D5F93C-1455</Id>
<Id>98655C3F-B58C</Id>
<Id>8AE4FD0A-6000</Id>
<Id>E56FE4CA-0D83</Id>
</store-Ids>
</soap:Body>
</soap:Envelope>
有没有办法解析出Id标签中的所有id?作为数组 (69E32281-0484, 3002AFCD-B494................) 或作为字符串 (69E32281-0484 3002AFCD-B4942C9E17AC-9D97.......... ....) 使用 Evaluate-XPath 或 Evaluate-xQuery 处理器?
//*[local-name()='Id']/text() -------- This gives me only the 1st id. and
//*[local-name()='Id'][2]/text() ------- This gives the 2nd id and so on....
//Id -------------------------------- This returns "Empty string set"
因为 ID 的数量将是动态的。无法像 [0]、[1]、[2] 那样对计数器值进行硬编码以获取每个 id 的值。
PS:在 NiFi 中还有许多其他方法可以完成此操作。但是想知道是否有一种方法可以使用 EvaluateXpath 处理器读取 XML 并将所有 id 标记值作为数组或文本获取。
相关链接
目前 EvaluateXPath 仅允许节点集中的单个元素,即使目标是流文件内容也是如此。我已经编写了一个改进的 Jira (NIFI-5187) 来涵盖对具有多个元素的节点集的支持。
作为解决方法,您可以将 EvaluateXQuery 与 //*/Id
结合使用,它会为您的每个 ID 发出一个流文件。然后您可以单独处理每一个,调用您喜欢的任何网络服务。