【问题标题】:Is there a way to get a verbatim string out of an ElementTree element?有没有办法从 ElementTree 元素中获取逐字字符串?
【发布时间】:2013-03-19 16:07:50
【问题描述】:

我正在尝试检查 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

我的问题是用method="xml" 调用ElementTree.tostring 会使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文档,我只需要提取&lt;result&gt;元素的字符串数据。如果有其他库允许我这样做,请指出。

【问题讨论】:

    标签: python xml-parsing elementtree


    【解决方案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>'
    

    【讨论】:

    • 没错。非常感谢!
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2021-04-30
    • 1970-01-01
    • 2014-04-07
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多