Perl解析格式错误的XML文件

时间:2014-11-04 21:10:49

标签: xml regex perl parsing

我正在为perl中的Ossec规则文件编写解析器。

我正在使用XML :: Simple,它通常运行正常,但有些规则文件格式不正确,而不是顶级<group> <\group>有几个。

我已阅读perlfaq:http://perldoc.perl.org/perlfaq6.html#How-can-I-pull-out-lines-between-two-patterns-that-are-themselves-on-different-lines%3f

我可以使用那里的示例匹配文本,但所有匹配都被分组。

我执行此操作的CLI代码是:

perl -ne 'print if /^<group name/ .. /^<\\group>/' attack_rules.xml

如何分开不同的比赛?

以下是格式错误的XML示例:

<!-- Privilege scalation messages -->
<group name="syslog,elevation_of_privilege,">
  <rule id="40501" level="15" timeframe="300" frequency="2">
    <if_group>adduser</if_group>
    <if_matched_group>attacks</if_matched_group>
    <description>Attacks followed by the addition </description>
    <description>of an user.</description>
  </rule>
</group> <!-- SYSLOG, ELEVATION_OF_PRIVILEGE, -->



<!-- Scan signatures -->
<group name="syslog,recon,">
  <rule id="40601" level="10" frequency="10" timeframe="90" ignore="90">
    <if_matched_group>connection_attempt</if_matched_group>
    <description>Network scan from same source ip.</description>
    <same_source_ip />
    <info type="link">http://project.honeynet.org/papers/enemy2/</info>
  </rule>
</group> <!-- SYSLOG,SCANS -->

1 个答案:

答案 0 :(得分:1)

如果唯一的问题是“多根”,您可以将每个文件内容包装在<root>...</root>中并解析结果。