即使使用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。
答案 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']
更明确的名称,但仍未指定名称空间。