2013-03-19 20 views
1

我正在檢查包含所有子元素的XML元素中的文本信息的MD5哈希值。這是與hipay服務交互所必需的。有沒有一種方法可以從ElementTree元素中獲取逐字字符串?

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.tostringmethod="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

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>' 
+0

沒錯。非常感謝你! – 2013-03-19 16:32:34

相關問題