为什么 splunk xpath 无法解析我的 rex 提取的 XML?

问题描述 投票:0回答:1

我正在尝试使用 xpath 从我的消息字段解析 XML 有效负载,但是我无法让 xpath 命令返回任何结果。

Msg: {"type":"RESP_OUT","method":"SampleMethod.callName","payload":<?xml version="1.0" encoding="UTF-8"?><Request><foo><bar nickname="spock"></bar></foo><foo><bar nickname="scotty"></bar></foo></Request>,"requestEvent":true} 

我可以使用 rex 从消息中提取 XML:

| rex field=Msg "{\"type\":\"RESP_OUT\",\"method\":\"SampleMethod.callName\",\"payload\":(?<Payload>.*),\"requestEvent\":true}"

但是当我尝试对 Payload 字段使用 xpath 时,我没有得到任何结果:

| xpath field=Payload outfield=Nickname "//bar/@nickname"

有什么建议吗?我不想对 XML 中需要查找的每个单独字段使用 rex。谢谢!

我尝试对 rex 提取的字段使用 xpath 和 | xmlkv 字段=有效负载

xpath splunk splunk-query
1个回答
0
投票

我无法解释为什么

xpath
不适合你,尽管它总是有其怪癖。我建议使用较新的
spath
命令,它可以解析 JSON 或 XML。语法有点不同,与
xpath
相比,我总是有更好的运气。

| makeresults 
| eval Msg="{\"type\":\"RESP_OUT\",\"method\":\"SampleMethod.callName\",\"payload\":<?xml version=\"1.0\" encoding=\"UTF-8\"?><Request><foo><bar nickname=\"spock\"></bar></foo><foo><bar nickname=\"scotty\"></bar></foo></Request>,\"requestEvent\":true}" 
``` Above just creates demo data.  Remove IRL ```
| rex field=Msg "{\"type\":\"RESP_OUT\",\"method\":\"SampleMethod.callName\",\"payload\":(?<Payload>.*),\"requestEvent\":true}"
| spath input=Payload output=Nickname path=Request.foo.bar{@nickname}
© www.soinside.com 2019 - 2024. All rights reserved.