NiFi: получить все элементы одного тега в XML с помощью процессора EvaluateXpath - PullRequest
0 голосов
/ 11 мая 2018

Попытка разобрать xml ниже в NiFi и хотела бы разобрать все идентификаторы и сделать несколько вызовов веб-службы для каждого идентификатора.

<?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>

Есть ли способ проанализировать все идентификаторы внутри тегов идентификаторов?В виде массива (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"  

Поскольку число идентификаторов будет динамическим.Невозможно жестко закодировать значение счетчика, например [0], [1], [2] ........, чтобы получить значение каждого идентификатора.

PS: есть много другихспособы сделать это в NiFi.Но хотелось бы узнать, есть ли способ прочитать XML с помощью процессора EvaluateXpath и получить все значения тега 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-cant-return-multiple-node-values.html

1 Ответ

0 голосов
/ 11 мая 2018

В настоящее время EvaluateXPath разрешает только один элемент в Nodeset, даже если местом назначения является flowfile-content. Я написал улучшение Jira ( NIFI-5187 ), чтобы покрыть поддержку Nodesets с несколькими элементами.

В качестве обходного пути вы можете использовать EvaluateXQuery с //*/Id, и он выдаст файл потока для каждого из ваших идентификаторов. Затем вы можете обрабатывать каждый из них по отдельности, вызывая те веб-сервисы, которые вам нравятся.

...