如何在 Python 3 中读取 XML 文档的标头?
理想情况下,我会使用 defusedxml 模块作为文件指出它更安全 https://docs.python.org/3/library/xml.html,但在这一点上(经过几个小时的尝试弄清楚这一点之后),我会选择任何解析器。
例如,我有一个文档(这实际上来自练习),如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <!-- this is root -->
<!-- CONTENTS -->
</plist>
我想知道如何访问根节点之前的所有内容。
这似乎是一个普遍的问题,我以为我可以轻松地在网上找到答案,但我想我错了。我发现的最接近的东西是Stack Overflow 上的这个问题 https://stackoverflow.com/questions/16155102/how-to-read-in-xml-header-version-using-python,这并没有真正帮助(我研究了xml.sax https://docs.python.org/3/library/xml.sax.html,但找不到任何相关内容)。
I tried minidom https://docs.python.org/3.6/library/xml.dom.minidom.html据报道,它很容易受到数十亿次笑声和二次爆炸攻击link https://docs.python.org/3/library/xml.html你提供的。这是我的代码:
from xml.dom.minidom import parse
dom = parse('file.xml')
print('<?xml version="{}" encoding="{}"?>'.format(dom.version, dom.encoding))
print(dom.doctype.toxml())
#or
print(dom.getElementsByTagName('plist')[0].previousSibling.toxml())
#or
print(dom.childNodes[0].toxml())
Output:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
<!DOCTYPE plist PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
<!DOCTYPE plist PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
您可以使用minidom
from defusedxml
。我下载了该包并将 import 替换为from defusedxml.minidom import parse
并且代码具有相同的输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)