Keep lxml from creating self-closing tags

前端 未结 2 1483
遥遥无期
遥遥无期 2020-12-20 20:37

I have a (old) tool which does not understand self-closing tags like . So, we need to serialize our XML files with opened/closed tags like this:

相关标签:
2条回答
  • 2020-12-20 21:17

    It seems like the <STATUS> tag gets assigned a text attribute of None:

    >>> tree[0]
    <Element STATUS at 0x11708d4d0>
    >>> tree[0].text
    >>> tree[0].text is None
    True
    

    If you set the text attribute of the <STATUS> tag to an empty string, you should get what you're looking for:

    >>> tree[0].text = ''
    >>> etree.tostring(tree)
    '<ERROR>The status is <STATUS></STATUS>.</ERROR>'
    

    With this is mind, you can probably walk a DOM tree and fix up text attributes before writing out your XML. Something like this:

    # prevent creation of self-closing tags
    for node in tree.iter():
        if node.text is None:
            node.text = ''
    
    0 讨论(0)
  • 2020-12-20 21:18

    If you tostring lxml dom is HTML, you can use

    etree.tostring(html_dom, method='html')
    

    to prevent self-closing tag like <a />

    0 讨论(0)
提交回复
热议问题