【问题标题】:Python: How to copy and insert a xml element at a specific locationPython:如何在特定位置复制和插入 xml 元素
【发布时间】:2019-05-28 14:32:57
【问题描述】:

我正在使用 xml.etree.ElementTree 来解析 XML 文件。我现在想 复制特定的 XML 元素并将其插入到我想要的目的地。

XML 文件基本上是什么样子的:

<file>
   <page id="1">
      <text id="1"> sample text </text>
      <text id="2"> sample text II </text>
   </page>
   <page id="2">
      <text id="1"> sample text copy</text>
      <text id="2"> sample text me </text>
   </page>
   <page id="3">
      <text id="1"> sample text hello </text>
      <text id="2"> sample text world </text>
   </page>
   <page id="4">
      <text id="1"> sample text game </text>
      <text id="2"> sample text over </text>
   </page>
</file>

例如,我想复制 id="2" 的页面元素并将其插入到 id="3" 的页面元素之后。另外,我想更改新元素的 id。

结果应该是什么样子:

<file>
   <page id="1">
      <text id="1"> sample text </text>
      <text id="2"> sample text II </text>
   </page>
   <page id="2">
      <text id="1"> sample text copy</text>
      <text id="2"> sample text me </text>
   </page>
   <page id="3">
      <text id="1"> sample text hello </text>
      <text id="2"> sample text world </text>
   </page>
   *<page id="2.1">
      <text id="1"> sample text copy</text>
      <text id="2"> sample text me </text>
   </page>*
   <page id="4">
      <text id="1"> sample text game </text>
      <text id="2"> sample text over </text>
   </page>
</file>

*插入的元素

我已经尝试了this 的一些变体,但我总是遇到属性问题(在本例中是 id)。 目前我正在使用 xml.etree.ElementTree,如果有人可以帮助我解决这个包的问题,​​那就太好了,但我会使用每一个解决问题的包。

【问题讨论】:

    标签: python xml xml.etree


    【解决方案1】:

    要查找特定节点,请使用带有一些 XPath 的 find() 来获取 id=2 的页面节点:

    # Find element to copy
    member1 = root.find(".//page[@id='2']")
    
    # Create copy
    member2 = copy.deepcopy(member1)
    

    要更改 id 属性的值,请使用:

    member2.set('id' , '2.1')
    

    现在您可以插入新元素作为第 4 个元素。为此,请使用插入而不是您链接的答案中使用的附加。

    root.insert(3, member2)
    

    输出是:

    <file>
       <page id="1">
          <text id="1"> sample text </text>
          <text id="2"> sample text II </text>
       </page>
       <page id="2">
          <text id="1"> sample text copy</text>
          <text id="2"> sample text me </text>
       </page>
       <page id="3">
          <text id="1"> sample text hello </text>
          <text id="2"> sample text world </text>
       </page>
       <page id="2.1">
          <text id="1"> sample text copy</text>
          <text id="2"> sample text me </text>
       </page>
       <page id="4">
          <text id="1"> sample text game </text>
          <text id="2"> sample text over </text>
       </page>
    </file>
    

    【讨论】:

      猜你喜欢
      • 2011-02-16
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      相关资源
      最近更新 更多