如何在Python 3中阅读XML文档的标题?
理想情况下,我会将defusedxml模块用作documentation states that it's safer,但此时(在尝试计算出来之后数小时),我会选择任何解析器。
例如,我有一个文档(这实际上来自练习),如下所示:
<?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>
我想知道如何在根节点之前访问所有内容。
这似乎是一个普遍的问题,我认为我很容易在网上找到答案,但我想我错了。我找到的最接近的是this question on Stack Overflow,它没有真正的帮助(我查看xml.sax,但找不到任何相关的内容。)
答案 0 :(得分:3)
根据你提供的minidom
,我试过了link,它容易受到十亿次笑声和二次爆炸攻击的影响。这是我的代码:
def do_a_thing(stuff, special=False):
special_value = 'IMPORTANT_VALUE' if special else EMPTY_VALUE
response = some.library.func(
first=os.environ['first'],
second=stuff['second'],
third=stuff['third']
fourth='Some Value',
fifth=False,
sixth=special_value,
seventh='example',
eighth=True
)
return response
输出:
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())
您可以使用<?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
。我下载了该软件包,只是将导入替换为defusedxml
,代码使用相同的输出。
答案 1 :(得分:3)
from lxml import etree
tree = etree.parse('input.xml')
info = tree.docinfo
v, e, d = info.xml_version, info.encoding, info.doctype
print('<?xml version="{}" encoding="{}"?>'.format(v, e))
print(d)
输出:
<?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">
答案 2 :(得分:0)
试试这个代码! 我在变量's'中假设临时xml。
我声明了一个具有XmlDecl函数的MyParser类来打印XML标题&amp;第二个函数的目的是解析XML头.so首先使用xml.parsers中定义的ParserCreate()函数创建解析器。
现在创建MyParser类'解析器'的对象&amp;使用对象引用调用parse函数。
from xml.parsers import expat
s = """<?xml version='1.0' encoding='iso-8859-1'?>
<book>
<title>Title</title>
<chapter>Chapter 1</chapter>
</book>"""
class MyParser(object):
def XmlDecl(self, version, encoding, standalone):
print ("XmlDecl", version, encoding, standalone)
def Parse(self, data):
Parser = expat.ParserCreate()
Parser.XmlDeclHandler = self.XmlDecl
Parser.Parse(data, 1)
parser = MyParser()
parser.Parse(s)