我正在尝试使用 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
不适合你,尽管它总是有其怪癖。我建议使用较新的 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}