我正在 Elastic Logstash 中解析 XML 结构。我可以使用 xpath 解析所有元素,但当 xml 属性存储在字段中时,我对格式不满意。 基本的 xml 结构如下所示:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<obj xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<event>
<entity>
<name>Name</name>
<other>additionalInfo</other>
</entity>
<entitydetails>
<details>
<info name="name">nameString</info>
<info name="descr"></info>
<info name="stock">5</info>
</details>
</entitydetails>
</event>
</obj>
注意,上面的 details->descr 没有值。
这是我在 Logstash 中使用的 xml 过滤器:
xml {
remove_namespaces => true
source => "message"
store_xml => false
xpath => ["//event/entity/name/text()", "nameField",
"//event/entity/other/text()", "otherField",
"//event/entitydetails/details/node()", "allDetailsField"]
}
上面parsning的问题在于xml结构中的属性:
<entitydetails>
<details>
<info name="name">nameString</info>
<info name="descr"></info>
<info name="stock">5</info>
</details>
</entitydetails>
将按以下格式存储在“allDetailsField”字段中:
, <info name="name">nameString</info> , <info name="descr"></info> , <info name="stock">5</info>
这不是我想要的。我希望将属性以下列格式存储在“allDetailsField”中: 名称=名称字符串,库存=5
请注意,“descr”属性不应存储在“allDetailsField”中,因为它没有值。
我尝试使用 ruby 脚本重新格式化“allDetailsField”中的内容,但没有成功。您知道解决方案的样子吗?