Python:如何在特定位置复制和插入 xml 元素
Python: How to copy and insert a xml element at a specific location
我正在使用 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>
*插入的元素
我已经尝试了 的一些变体,但我总是遇到属性问题(在本例中为 id)。
目前我正在使用 xml.etree.ElementTree,如果有人可以帮助我用这个包解决我的问题,那就太好了,但我会使用每个解决问题的包。
要查找特定节点,请使用带有一些 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>
我正在使用 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>
*插入的元素
我已经尝试了
要查找特定节点,请使用带有一些 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>