java - 从 "unstructured"纯文本中解析出 XML

标签 java xml

我正在使用发布系统中的大型文本文件。其结构如下:

-- File header
-- File Attribute 1
-- File Attribute 2

<xml>File summary</xml>

-- Record header
-- Record attribute 1

<xml>Record1</xml>

-- Record 1 header
-- Record attribute 1

<xml>Record1</xml>

-- Record 2 header
-- Record attribute 1

<xml>Record2</xml>

-- Record n header
-- Record attribute 1

<xml>Recordn</xml>

一个文件中可能有数十万条记录,并且 XML 是一个单行的大型结构。行的长度可以达到数千个字符。

首先,是的,这很疯狂 - 我的第一个任务是返回发布系统并解释 XML 的工作原理! ;) 同时,我需要一种剥离 XML 并构建结构化输出文件的方法:

<xml>
    <header/>
    <listofrecords>
        <record1/>
        <record2/>
        <recordn/>
    </listofrecords>
</xml>

请注意,我对文本标题内容不感兴趣。

我正在努力理解最快且最可维护的方法来做到这一点。

我的想法是使用 Java 和 BufferedReader 逐行解析输入文件。当我遇到 XML 标记时,我会读取结束 XML 标记并添加到输出文件结构中。

有没有更快的方法来做到这一点? RegEx 可以帮助识别我需要提取为新格式的文本吗?

抱歉,这是一个开放式问题,如果它不属于 Stack Overflow 的范围,我会理解。不过,任何想法都非常感谢

最佳答案

我会使用 perl 脚本

#! /usr/bin/perl
#
print "<xml>\n";
while($line = <>) {
    if ($line =~ m!-- File (.*)!) {
        print "    <header $1/>\n";
        print "    <listofrecords>\n";
        last;
    }
}
while($line = <>) {
    if($line =~ m!<xml>(.*)</xml!) {
        print "        <$1/>\n";
    }
}
print "    </listofrecords>\n";
print "</xml>";

关于java - 从 "unstructured"纯文本中解析出 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303570/

相关文章:

java - 如何在单个主机上运行quartz作业

java - Pom.xml:连接超时和模型版本丢失错误

android - 删除所有语言的字符串 Android

java - 从 OSGI bundle 访问 Drools Guvnor

java - 自定义键盘 - Android

java - 正则表达式匹配字符串并排除其他所有内容,直到出现新行

xml - 是否可以使用 Metro Web 服务框架获取原始 XML 有效负载?

java - 使用java从xml中删除包含实体的文档类型

.net - 识别并删除会破坏 FOR XML 的字符

java - Web 容器究竟何时初始化 servlet?