【问题标题】:Parsing XML document with namespace using logstash使用 logstash 解析带有命名空间的 XML 文档
【发布时间】:2015-09-16 12:47:38
【问题描述】:

我正在尝试使用 logstash 解析以下 xml 数据。我可以通过从标签中删除命名空间来做到这一点。但是当我在其中包含命名空间的实际文档上尝试它时,它无法解析田野。有人可以帮助使用命名空间还是我在其他地方出错了吗?

<Book:Body>
    <Book:Head>
        <bookname>Book:Name</bookname>
            <ns:Hello xmlns:ns="www.example.com">
                <ns:BookDetails>
                    <ns:ID>123456</ns:ID>
                    <ns:Name>ABC</ns:Name>
                </ns:BookDetails>
        </ns:Hello xmlns:ns="www.example.com">
    </Book:Head>
</Book:Body>

以下是我的配置文件:

multiline   {
                       pattern =>  "<Book:Body>"
                        what => "previous"
                        negate => "true"
            }

                xml {
                        store_xml => "false"
                        source => "message"
                        remove_namespaces => "true"

                        xpath =>[
                                "/Book/Book/BookDetails/ID/text()","ID",

                                "/Book/Book/BookDetails/Name/text()","Name"
                                ]


                    }

                mutate {
                        add_field => ["IDIndexed", "%{ID}"]
                        add_field => ["NameIndexed", "%{Name}"]
                        }

由于它没有被解析,我只是使用 mutate 获取 %{ID} 和 %{Name} 而不是获取它们的实际值。

【问题讨论】:

  • 您的 XPath 似乎与您的示例 XML 不匹配。鉴于您的样本,我本来希望看到:/Body/Head/bookname/Hello/BookDetails/ID.
  • 非常感谢..它有帮助! :)

标签: xpath logstash logstash-grok logstash-configuration


【解决方案1】:

问题出在 xpath 中: 试试这个

xpath => [
 "/Body/head/Hello/BookD/BookDetails/ID/text()", "ID",
  "/Body/head/Hello/BookD/BookDetails/Name/text()", "Name",
    ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2012-06-09
    • 2010-09-12
    • 2014-07-28
    相关资源
    最近更新 更多