【问题标题】:Java How to read a TEXT log file that contains separate XML and extract the XML BlocksJava 如何读取包含单独 XML 的 TEXT 日志文件并提取 XML 块
【发布时间】:2017-07-05 20:00:46
【问题描述】:

使用 Java

我有一个应用程序,它将接收到的所有 XML 消息写入日志文件。每个 XML 消息都由 log4j 附加到日志文件中。

这适用于具有唯一文本块开头和结尾的任何类型的文本文件。这并不具体。

每个日志文件中可能有数千条 XML 消息,并且每天都会创建新的日志文件。

除了将日志文件中的每个 XML 消息(XML 块)拉入 Java 中的内存变量之外,我无需将日志文件中的 XML 解析为其元素。 (从第一个标记到最后一个标记的整个 XML 块都需要在一个内存变量中)。

我将把这个 XML 发送到一个 Web 服务,以类似于今天从我们的中间件发送它的方式进行处理。

我已经有那个部分可以发送 XML 并且只要 XML 在日志文件中的一行上就能够处理文件,但是应用程序中的 XML 编写器在某些情况下会在缩进的新行中写入 XML因此需要能够从日志文件中提取 XML 消息块。

所以-我需要从第一个标签读取日志文件中的XML:

<?xml version='1.0' encoding='UTF-8'?>

直到最后一个标签的最后一个标签:

</MyXML>

无论文件中是否有回车或空行,都必须跳过无效行。

每条 XML 消息可以很小也可以很大 - 很容易超过 20k。

XML 日志文件将如下所示,并且每个 XML 消息或其他文本之间可能有空白行,如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<MyXML>
<Envelope documentType="SetProfile" trader="BEA" dtdRev="2.0" xid="03-JUL-17 14:38:49" traderLogin="middleware" traderPassword="abc123"/>
<Payload><SetProfile allowInvalidProfile="F">
<Partner publisherID="52725" act="Update">
<Contact languageCode="EN" firstName="Luis" lastName="Dini" email="Dini@email.com" act="Update" publisherID="ldini" securityRoleCode="6"/>
</Partner></SetProfile>
</Payload>
</MyXML>

<?xml version='1.0' encoding='UTF-8'?><MyXML><Envelope documentType="SetProfile" trader="BEA" dtdRev="2.0" xid="03-JUL-17 14:38:49" traderLogin="middleware" traderPassword="abc123"/><Payload><SetProfile allowInvalidProfile="F"><Partner publisherID="9857684" act="Update"><Contact languageCode="EN" firstName="Bill" lastName="Jones" email="Jones@email.com" act="Update" publisherID="BJones" securityRoleCode="3"/></Partner></SetProfile></Payload></MyXML>

======================
#]
<?xml version='1.0' encoding='UTF-8'?><MyXML><Envelope documentType="SetProfile" trader="BEA" dtdRev="2.0" xid="03-JUL-17 14:38:49" traderLogin="middleware" traderPassword="abc123"/>
<Payload><SetProfile allowInvalidProfile="F"><Partner publisherID="7465737" act="Update">
<Contact languageCode="EN" firstName="John" lastName="Smith" email="Smith@email.com" act="Update" publisherID="JSmith" securityRoleCode="3"/></Partner></SetProfile></Payload></MyXML>

简而言之,这将是一个工具,它将读取 XML 消息的日志文件并提取每个单独的 XML 消息以转发到 Web 服务,类似于现在中间件创建和发送每个 XML 消息的方式。

这将用于批量测试和其他开发需求。

欢迎提出任何建议。

【问题讨论】:

    标签: java xml parsing logging text


    【解决方案1】:

    一种简单的方法是将日志文件内容加载到字符串中,然后使用正则表达式,如下所示:

    Pattern p = Pattern.compile(Pattern.quote("<?xml version='1.0' encoding='UTF-8'?>") + ".*?" + Pattern.quote("</MyXML>"));
    Matcher m = p.matcher(allText);
    while (m.find()) {
        System.out.println(m.group());
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-19
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多