如何创建 XML 解析器?
Posted
技术标签:
【中文标题】如何创建 XML 解析器?【英文标题】:How to create an XML Parser? 【发布时间】:2022-01-16 23:05:51 【问题描述】:情况:
我正在使用 Nmap 进行网络扫描,并想创建一个脚本,该脚本以 XML 格式获取一些 Nmap 输出并对其进行解析,并在此基础上打印我想要的信息。
问题描述:
这个解析器应该:
能够接受给定的输入并产生输出
输入应该是一个 XML 文件。
输出应该是以下两件事之一:
-
能够在终端上打印文本
能够将处理后的信息输出到文本文件或 html 文件。
结论:
我需要构建一个具有上述功能的解析器,我该如何实现呢? 或者,如果可能的话,是否有任何具有所需功能的现成解决方案?
编辑 1: 我想使用 bash 脚本,而 bash 脚本是最受欢迎的答案,但我也对其他语言持开放态度。
【问题讨论】:
【参考方案1】:在处理 nmap 结果时,我首先想到的是Zenmap,但这更像是一个用于 nmap 的 GUI。您可能想查看nmap-parse,它是一个命令行工具,似乎可以提供您想要的;虽然我自己从来没有使用过,所以我不能保证。
我应该指出,如果您对 Python 有点熟悉,那么创建自定义脚本来解析 nmap 输出非常简单。这是我在查看 Python xml module 和 nmap XML output 的文档后创建的示例:
import xml.etree.ElementTree as ET
tree = ET.parse('output.xml')
root = tree.getroot()
for host in filter(lambda h: h.tag == 'host', root):
status = host.find('status')
address = host.find('address')
print('Host', address.attrib['addr'], 'is', status.attrib['state'])
【讨论】:
嗨,谢谢,但是有没有办法使用 bash 脚本来实现呢? 另外,这个工具看起来不错,当我测试它并完成工作时,我会发布编辑或答案。 虽然在技术上是可行的,但在 bash 中解析 xml 是一个有争议的话题(请参阅 this question)我非常怀疑它会给您留下一个像 Python 一样简单的脚本。 实际上,该链接有我的解决方案,但也非常感谢 python 替代方案。我已将此答案标记为已接受。以上是关于如何创建 XML 解析器?的主要内容,如果未能解决你的问题,请参考以下文章
Android中三种常用解析XML的方式(DOMSAXPULL)简介及区别