使用Python解析XML来打印值[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python解析XML来打印值[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一个XML文件,其中包含通常与勒索软件和恶意软件相关的文件名和文件扩展名。

使用Python,我想解析“Pattern Value”以简单地打印“Pattern Value”中包含的值。目标是输出到一个简单的文本文件,每行显示一个文件名或文件扩展名。

我试图在Notepad ++中使用宏,但这是一个失败。我是一个Python noob,我想用Python完成这个

以下是XML文件:

<?xml version="1.0" ?>
<Root >
    <Header DatabaseVersion = '2.0' ></Header>
    <QuotaTemplates ></QuotaTemplates>
    <DatascreenTemplates ></DatascreenTemplates>
    <FileGroups >
        <FileGroup Name = 'Anti-Ransomware%sFile%sGroups' Id = '{367CFFB7-DDED-4AA8-8E17-203B6B97F411}' Description = '' >
            <Members >
                <Pattern PatternValue = '!!%sRETURN%sFILES%s!!.txt' ></Pattern>
                <Pattern PatternValue = '!!!%sHOW%sTO%sDECRYPT%sFILES%s!!!.txt' ></Pattern>
                <Pattern PatternValue = '!!!%sREAD%sTHIS%s-%sIMPORTANT%s!!!.txt' ></Pattern>
                <Pattern PatternValue = '!!!!!ATENÇÃO!!!!!.html' ></Pattern>
                <Pattern PatternValue = '!!!!!SAVE%sYOUR%sFILES!!!!.txt' ></Pattern>
                <Pattern PatternValue = '!!!-WARNING-!!!.html' ></Pattern>
                <Pattern PatternValue = '!!!-WARNING-!!!.txt' ></Pattern>
                <Pattern PatternValue = '!!!GetBackData!!!.txt' ></Pattern>
                <Pattern PatternValue = '!!!README!!!*.rtf' ></Pattern>
                <Pattern PatternValue = '!!!READ_TO_UNLOCK!!!.TXT' ></Pattern>
                <Pattern PatternValue = '!!!SAVE%sYOUR%sFILES!.bmp' ></Pattern>
                <Pattern PatternValue = '!##%sDECRYPT%sFILES%s##!.txt' ></Pattern>
                <Pattern PatternValue = '!#_DECRYPT_#!.inf' ></Pattern>
                <Pattern PatternValue = '!DMALOCK3.0*' ></Pattern>
                <Pattern PatternValue = '!Decrypt-All-Files-*.txt' ></Pattern>
                <Pattern PatternValue = '!Please%sRead%sMe!.txt' ></Pattern>
                <Pattern PatternValue = '!READ.htm' ></Pattern>
                <Pattern PatternValue = '!Recovery_*.html' ></Pattern>
                <Pattern PatternValue = '!Recovery_*.txt' ></Pattern>
                <etc.../>
            </Members>
        </FileGroup>
    </FileGroups>
</Root>

同样,目标是在新行上的文本文件中输出每个文件名/文件扩展名。例如

test.malware
test.ransomware 
test.virus
etc
etc
etc

提前感谢您的协助

答案

python的标准xml解析器通常是xml.etree.ElementTree库。

基本用法是首先解析你的xml,如果你已经以某种其他方式读取了文件,那么可以从文件名或字符串中完成(或者以某种其他方式生成字符串,即:从端口读取等)。

import xml.etree.ElementTree as ET
tree = ET.parse('myxmlfile.xml')

那么你有很多选择如何找到感兴趣的元素,但我建议一些内置的搜索工具,如ElementTree.iterfind()

for element in tree.iterfind('Pattern'):
    print(element.attrib)

根据结构的不同,此搜索可能不够具有选择性,但您可以先找到所需的部分(文件组的成员或非成员等),然后从那里执行搜索。

以上是关于使用Python解析XML来打印值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何解析此 xml 并检索 iPhone 中的数据 [重复]

使用 Java 解析 XML 并获取元素值和属性值

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

如何使用 python xml.etree.ElementTree 解析 eBay API 响应?

使用非utf-8编码在Python中解析XML

13 个非常有用的 Python 代码片段