我想完全解析XML文件并提取所有标记的值。我有用于提取我提到的标签值的代码。但我想提取所有标签的所有值。手动提及所有标签和提取是不可能的吗?这就是为什么我需要知道一种方法。请帮助我。
提前致谢。!!
PYTHON CODE:
from xml.dom import minidom
document = minidom.parse("forms.xml")
def findChildNodeByName(parent, name):
for node in parent.childNodes:
if node.nodeType == node.ELEMENT_NODE and node.localName == name:
return node
return None
def getText(nodelist):
rc = []
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
return ''.join(rc)
titles =[]
servers = document.getElementsByTagName('servers')
for server in servers:
item1 = server.getElementsByTagName("server")
print item1
for item2 in item1:
value = item2.getElementsByTagName("host") [0].childNodes[0].data
print value
titles.append(value)
print titles
XML文件:
<servers>
<server>
<host> HOST1 </host>
<port> 6667 </port>
<channel>
<name> CHANNAME1</name>
</channel>
<channel>
<name> CHANNAME2 </name>
</channel>
</server>
<server>
<host> HOST2 </host>
<port> 6667 </port>
<channel>
<name> CHANNAME3 </name>
</channel>
输出:
HOST1
HOST2
答案 0 :(得分:2)
声音lxml.etree.iterparse()
是你的朋友。
(粗略地)引用文档(我自己添加的任何错误):
from lxml import etree
from StringIO import StringIO
xml = '''
<root>
<element key='value'>text</element>
<element>text</element>tail
<empty-element xmlns="http://testns/" />
</root>
'''
context = etree.iterparse(StringIO(xml))
for action, elem in context:
print("%s: %s (attribs: %r; text: %r)"
% (action, elem.tag, elem.attrib, elem.text))
...将遍历每个元素,显示其属性和文本。值得注意的是,此示例中的代码不会对名称进行硬编码(element
,key
,empty-element
等。
如果您关心上下文,请使用堆栈记录您所在的元素(已看到start
但不是end
的行为)。