【发布时间】:2018-08-23 12:44:46
【问题描述】:
我有以下 xml。我需要将 IP 地址、协议和端口提取到具有相应列名的 CSV 文件中。
<rule family="ipv4">
<source address="10.XXX.XX.XX"/>
<port protocol="tcp" port="22"/>
<log prefix="ber_" level="warning">
<limit value="1/m"/>
</log>
<accept/>
</rule>
<rule family="ipv4">
<source address="10.XXX.XX.XXX"/>
<port protocol="udp" port="1025"/>
<log prefix="ber_" level="warning">
<limit value="1/m"/>
</log>
<accept/>
我可以像 grep -Eo "([0-9]{1,3}[\.]){3}[0-9]{1,3}" 这样使用 grep 或 sed 来 grep IP 地址或端口,但我需要它作为 CSV 文件中的列。
IPAddress 协议端口。实现这一目标的最佳方法是什么?
【问题讨论】:
-
使用 XPath 获取值。在 Linux 上,您可以使用 xmllint。
-
您通常无法使用正则表达式解析 XML,本网站已讨论了数百次。如果您想要在输入格式稍有变化时不会失败的健壮代码,您必须使用 XML 解析器来加载 DOM,或使用 XPath 评估器。 Perl 或 Python 都有你需要的一切。
-
请提供 REAL xml
-
给新人的建议:如果一个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,也可以选择投票(投票至少需要 15 声望)点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请看the relevant help-center article