【问题标题】:Parsing XML server logs using java and sending them to database使用 java 解析 XML 服务器日志并将它们发送到数据库
【发布时间】:2014-01-29 18:00:18
【问题描述】:

我被分配了一项任务来解析服务器日志(xml 文件),在完整的 XML 文件中查找特定字符串,然后仅将特定节点信息存储到数据库中。

下面是场景:

在整个 XML 文件中,java 代码将寻找“Start Daemon DaemonMsg_TriggerForceDequeue”字符串。无论在哪里找到这个字符串,java代码都会选择整个节点,并且完整的节点信息将以行/列格式发送到oracle数据库。

我是新手,谁能建议我如何做到这一点?

【问题讨论】:

  • 请添加 XML 示例。
  • 这个问题基本上只是一个更具体的XML解析问题。有很多很好的教程,以及涵盖这个主题的堆栈溢出问题。这是一个简单的教程,或者查看相关主题的右侧边距:mkyong.com/java/how-to-read-xml-file-in-java-dom-parser

标签: java xml oracle parsing dom


【解决方案1】:

在 XML 文档中搜索的最简单方法是使用 XPath。

如果看不到 XML 文档,很难更具体,但此 XPath 语句将搜索所有节点并返回包含给定值的节点:

//*[contains(text(), 'Start Daemon DaemonMsg_TriggerForceDequeue')

将它与 Java XPath API 结合起来,您最终会得到如下结果:

XPath xPath =  XPathFactory.newInstance().newXPath();
NodeList nodeList = (NodeList)xPath.compile("//*[contains(text(), 'Start Daemon DaemonMsg_TriggerForceDequeue')").evaluate(document, XPathConstants.NODESET);

for (int i = 0; i < nodeList.getLength(); i++)
{
  System.out.println(nodeList.item(i).getTextContent());
}

你没有就问题的数据库部分提供足够的细节,所以我只能给出非常笼统的建议。

在数据库中存储 XML 的标准方法是使用 CLOB。标准 JDBC 支持这一点,如 here 所述。

当您使用 Oracle 时,您还可以考虑他们的自定义 XML Type。这是非标准的,并且受 here 中描述的 JDBC 扩展支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    相关资源
    最近更新 更多