0

需要将文本文件解析为特定的xml格式。(文件是一个巨大的百万行,看起来像这样)

ABC-DATA-FILE-VERSION: 2.0

OBJFILE:    /home/abc/src/solaris/abc.o

TIMESTAMP: 1348314377 727216

SRCFILE:    /home/abc/src/solaris/abc.C

    167 7
    170 7
    174 0
    179 0
    174 0
    192 7
    196 7
    199 7
    215 0

OBJFILE:    /home/abcd/src/solaris/abcd.o

TIMESTAMP: 1348314377 727216

SRCFILE:    /home/abcd/src/solaris/abcd.C

    58  7
    65  7
    66  7
    67  7
    69  0
    79  0
    84  0
    97  14
    100 7
    108 14
    110 7
    115 14

OBJFILE:    /home/abcd/src/solaris/xyz.o

TIMESTAMP: 1348314377 727216

SRCFILE:    /home/abcd/src/solaris/xyz.C

    978   0
    979   1
    993   0
    996   0
    997   0
    1011  0
    1003  0
    1004  0
    1011  0

现在我想将其转换为特定的 xml 文件格式。像

<packages>
    <package name="com" line-rate="0.45161290322580644" branch-rate="0.4915254237288136" complexity="3.391891891891892">
        <classes>
            <class branch-rate="0" complexity="0" filename="/home/abcd/src/solaris/abcd.C" line-rate="0.25" name="TestRunnerModel">
                <methods/>
                <lines>
                    <line number="13" hits="1" branch="true"/>
                    <line number="14" hits="1" branch="true"/>
                    <line number="15" hits="1" branch="false"/>
                    <line number="12" hits="0" branch="false"/>
                </lines>
            </class>
            <class branch-rate="0" complexity="0" filename="/home/abcd/src/solaris/abcd.C" line-rate="0.25" name="TestRunnerModel">
                <methods/>
                <lines>
                    <line number="13" hits="1" branch="true"/>
                    <line number="14" hits="1" branch="true"/>
                    <line number="15" hits="1" branch="false"/>
                    <line number="12" hits="0" branch="false"/>
                </lines>
            </class>
            <class branch-rate="0" complexity="0" filename="/home/abcd/src/solaris/xyz.C" line-rate="0.25" name="TestRunnerModel">
                <methods/>
                <lines>
                    <line number="13" hits="1" branch="true"/>
                    <line number="14" hits="0" branch="true"/>
                    <line number="15" hits="1" branch="false"/>
                    <line number="12" hits="0" branch="false"/>
                </lines>
            </class>
        </classes>
    </package>
</packages>

大多数 xml 参数都是恒定的,只有少数我需要填充

从 SRCFILE 读取的文件名:/home/abcd/src/solaris/xyz.C 和

line number="978" hits="0" branch="true" line number="979" hits="1" branch="false" 等

等等。请帮忙。

4

1 回答 1

0

原则上,它非常简单。您有给定输入格式的输入,并且您希望以给定的输出格式生成输出。您需要输入格式的解析器来识别其结构并构建表示该结构的数据结构。你需要一个序列化器来生成你想要的 XML 数据结构。

您的输入格式可能存在解析库,在这种情况下,您可能希望使用它们,而不是从头开始编写自己的解析器。您的语言也可能(并且可能确实)具有将事物序列化为 XML 的库;您可能想使用它们。

如果您知道如何为定义的格式编写解析器,那么您现在就知道需要做什么了。如果您不这样做,您可以使用 sed、awk、perl 或您选择的批处理编辑器来伪造它,但是如果您花一些时间学习解析,您作为程序员的生活将会更加有趣。

于 2012-09-25T15:25:45.880 回答