Python编写一个程序以尝试解析XML/HTML标签.

现有如下一段内容: <composer>Wolfgang Amadeus Mozart</composer> <author>Samuel Beckett</author> <city>London</city> 希望自动格式化重写为: composer: Wolfgang Amadeus Mozart author: Samuel Beckett city: London
版本python3.5.2

要给这段文字添加一个 root 标签,然后对里面的 node 进行遍历。root 标签的名字可以任意定(但是必须添加一个),我这里使用的 root 命名,对于其它的名字也一样。如果你是直接读取的 XML 文件,而不是字符串,可以将文件打开,然后把文件句柄传入 ElementTree.parse() 函数,最后对其返回值进行遍历。


from xml.etree import ElementTree
parsed = ElementTree.XML('''<root>
<composer>Wolfgang Amadeus Mozart</composer> <author>Samuel Beckett</author> <city>London</city>
</root>''')
outstr = []
for node in parsed:
    outstr += ['%s:%s'%(node.tag, node.text)]
print(' '.join(outstr))

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-12
在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data,准备好这3个函数,然后就可以解析xml了。
举个例子,当SAX解析器读到一个节点时:
<a href="/">python</a>
会产生3个事件:
start_element事件,在读取<a href="/">时;
char_data事件,在读取python时;
end_element事件,在读取</a>时。
用代码实验一下:
from xml.parsers.expat import ParserCreate
class DefaultSaxHandler(object):
    def start_element(self, name, attrs):
        print('sax:start_element: %s, attrs: %s' % (name, str(attrs)))
    def end_element(self, name):
        print('sax:end_element: %s' % name)
    def char_data(self, text):
        print('sax:char_data: %s' % text)
xml = r'''<?xml version="1.0"?>
<ol>
    <li><a href="/python">Python</a></li>
    <li><a href="/ruby">Ruby</a></li>
</ol>
'''
handler = DefaultSaxHandler()
parser = ParserCreate()
parser.returns_unicode = True
parser.StartElementHandler = handler.start_element
parser.EndElementHandler = handler.end_element
parser.CharacterDataHandler = handler.char_data
parser.Parse(xml)

本回答被提问者和网友采纳
相似回答