【问题标题】:xml.etree.ElementTree append parent tag to child tagxml.etree.ElementTree 将父标签附加到子标签
【发布时间】:2021-10-03 10:29:34
【问题描述】:

我正在尝试使用xml.etree.ElementTree 来解析 xml 字符串,找到特定标签,并通过附加父标签来包装子标签。

我的 XML:

<a>
      <b>text1</b>
      <c>text2</c>

</a>

所需的 XML:

<a>
      <b>text1</b>
      <new_parent_tag_added>
         <c>text2</c>
      </new_parent_tag_added>
</a>

当前代码:

document_root = etree.ElementTree(etree.fromstring( XML_STRING))
root = document_root.find('a')
b = etree.SubElement(root, 'new_parent_tag_added')
c = etree.SubElement(b, 'c')

在上面的代码中,如何保留现有标签&lt;c&gt; 的值,使其与我想要的xml 匹配?

【问题讨论】:

    标签: python python-3.x xml xml-parsing elementtree


    【解决方案1】:

    使用内置的 ElementTree 模块,您可以做到(谢谢@mzjn):

    c = root.find('c')
    etree.SubElement(root, 'new_parent_tag_added').append(c)
    root.remove(c)
    
    

    lxml.etree 会短一些:

    etree.SubElement(root, 'new_parent_tag_added').append(root.find('c'))
    

    无论哪种方式,记住节点的行为就像列表是很好的,这样您就可以追加内容。

    【讨论】:

    • 此代码适用于 lxml。使用 ElementTree,它会在输出中产生两个 c 元素。需要明确的root.remove(c)
    • @mzjn 有什么办法可以使用from xml.etree import ElementTree as etree吗?
    • 是的,您需要删除“原始”c 元素。
    • 顺便把内置模块称为“ElementTree”。 "xml" 只是顶层包,它包含几个与 XML 相关的子模块:docs.python.org/3/library/xml.html.
    • @mzjn 你介意分享一些实现我上述要求的例子吗?
    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多