需要将文本文件解析为特定的xml格式

时间:2012-09-25 10:06:40

标签: xml shell

需要将文本文件解析为特定的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读取的FILENAME:/home/abcd/src/solaris/xyz.C 和

行号=“978”hits =“0”branch =“true” 行号=“979”hits =“1”branch =“false” 等

等等。请帮忙。

1 个答案:

答案 0 :(得分:0)

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

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

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