Как я могу получить значение определенного значения в XML-файле? - PullRequest
1 голос
/ 21 мая 2019

Я не получаю никакого результата, даже когда использую local-name () для получения значения xml.

Я работаю с NiFi (apache 1.9.2) и у меня, вероятно, есть проблемас пространствами имен.У меня есть XML-файл, который я получаю, который выглядит следующим образом:

<RCV_MSG xmlns="data" dateread="2019/02/13">
  <METADATA>
    <TEXT Name="filename">C:\transmit\241</TEXT>
    <TEXT Name="code">8EAFB40</TEXT>
  </METADATA>
</RCV_MSG>

Я пытаюсь использовать процессор EvaluateXPath для отправки значения 8EAFB40 в файл потока.

Содержимоеполя в процессоре:

Destination: flowfile-content
Return Type: string
Validate DTD: false
extract (the manditory added) : //*[local-name()-'METADATA']

Я знаю, что последнее поле "extract" является проблемой ..., которая возвращает оба значения TEXT, то есть:

C:\transmit\241
8EAFB40

I 'Мы пробовали множество различных способов получить просто вторую строку, но пока это было бесплодно (я получаю пустые результаты).Кстати, это уменьшено по сравнению с реальной проблемой ... Я не могу просто взять вторую строку и покончить с этим.Мне действительно нужно извлечь XML.

Ответы [ 2 ]

3 голосов
/ 21 мая 2019

Поскольку вы не хотите иметь дело с пространствами имен, вы можете использовать этот XPath:

//*[local-name() = 'METADATA']/*[@Name = 'code']

или, чтобы сделать его более точным, вы можете использовать функцию namespace-uri(), например ::

//*[local-name() = 'METADATA' and namespace-uri() = 'data']/*[@Name = 'code']
1 голос
/ 21 мая 2019

Ладно, еще немного уточнения ... если вам нужно убедиться, что это именно тот путь в примере:

/*[local-name()='RCV_MSG']/*[local-name()='METADATA']/*[local-name()='TEXT' and @Name='code']

Более явный ... но все еще не указывает пространство имен.

...