有没有办法从ElementTree元素中获取逐字字符串?

时间:2013-03-19 16:07:50

标签: python xml-parsing elementtree

我正在尝试检查XML元素(包括其所有子元素)中文本信息的MD5哈希值。这是与hipay服务互动所必需的。

def CheckMD5(tree):
    m = hashlib.md5()
    body = tree.find('result')
    m.update(ET.tostring(ET.ElementTree(body).getroot(), method="html"))

    return tree.find('md5content').text == m.hexdigest()

完整代码: https://github.com/fabiosantoscode/python-hipay/blob/master/hipay.py#L566

我的问题是,使用ElementTree.tostring调用method="xml"会使ElementTree崩溃关闭空元素的标记,但使用method="html"我会失去大小写。例如:

>>> ET.tostring(ET.fromstring('<rt><a></a><CapName>asd</CapName></rt>'), method='xml')
'<rt><a /><CapName>asd</CapName></rt>'
>>> ET.tostring(ET.fromstring('<rt><a></a><CapName>asd</CapName></rt>'), method='html')
'<rt><a></a><CapName>asd</capname></rt>'
>>>

注意:

我根本不需要修改这个XML文档,我只需要提取<result>元素的字符串数据。如果有其他图书馆允许我这样做,请注明。

1 个答案:

答案 0 :(得分:1)

LH.tostring不会折叠结束标记:

In [34]: import lxml.etree as ET

In [35]: import lxml.html as LH

In [36]: LH.tostring(ET.fromstring('<rt><a></a><CapName>asd</CapName></rt>'))
Out[36]: '<rt><a></a><CapName>asd</CapName></rt>'