如何获取xml文件中特定值的值?

时间:2019-05-20 22:29:18

标签: xml xslt xpath apache-nifi

即使使用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']

我知道最后一个字段“提取”是问题...返回了两个TEXT值,即:

C:\transmit\241
8EAFB40

我尝试了很多不同的方法来获得 just 第二行,但是到目前为止,它一直没有结果(我得到的结果是空的)。顺便说一句,这是从实际问题集中减少的。我真的需要提取XML。

2 个答案:

答案 0 :(得分:3)

由于您不想处理名称空间,因此可以使用以下XPath:

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

或更精确地说,您可以使用namespace-uri()函数,例如:

//*[local-name() = 'METADATA' and namespace-uri() = 'data']/*[@Name = 'code']

答案 1 :(得分:1)

好吧,再完善一点……如果您必须确保它与示例中的路径完全相同:

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

更明确的名称,但仍未指定名称空间。