如何解析 Logstash 中的 xml 属性并将它们以良好的格式存储在字段中

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

我正在 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”中的内容,但没有成功。您知道解决方案的样子吗?

xml-parsing logstash
© www.soinside.com 2019 - 2024. All rights reserved.