如何解析Python中的所有XML标记?

时间:2014-03-01 15:27:14

标签: python xml parsing

我想完全解析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

1 个答案:

答案 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))

...将遍历每个元素,显示其属性和文本。值得注意的是,此示例中的代码不会对名称进行硬编码(elementkeyempty-element等。

如果您关心上下文,请使用堆栈记录您所在的元素(已看到start但不是end的行为)。