如何创建 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 解析器?的主要内容,如果未能解决你的问题,请参考以下文章

PHP XML Expat 解析器

xml解析

Android中三种常用解析XML的方式(DOMSAXPULL)简介及区别

如何使用 SAX 解析器解析 XML

使用 SAX 解析器,如何解析具有相同名称标签但元素不同的 xml 文件?

如何在 C# 中配置 XML 解析器以禁用外部实体解析