NiFi:使用EvaluateXpath处理器获取XML中同一标签的所有元素



尝试在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 标记值。

相关链接

1( https://community.hortonworks.com/questions/101922/how-to-use-evaluatexpath-to-get-xml-roots-attribut.html

2(https://community.hortonworks.com/questions/140605/evaluatexpath-不能返回-多节点值.html

目前 EvaluateXPath 只允许 Nodeset 中的单个元素,即使目标是 flowfile-content。我编写了一个改进的Jira(NIFI-5187(,以涵盖对具有多个元素的节点集的支持。

作为一种解决方法,您可以将 EvaluateXQuery 与//*/Id一起使用,它将为您的每个 ID 发出一个流文件。然后,您可以单独处理每个服务,调用您喜欢的任何 Web 服务。

相关内容

  • 没有找到相关文章

最新更新