XML ElementTree - 索引标记

use*_*703 6 python xml elementtree xml.etree

我有一个XML文件:

<sentence id="en_BlueRibbonSushi_478218345:2">
   <text>It has great sushi and even better service.</text>
</sentence>
<sentence id="en_BlueRibbonSushi_478218345:3">
   <text>The entire staff was extremely accomodating and tended to my every need.</text>
</sentence>
<sentence id="en_BlueRibbonSushi_478218345:4">
   <text>I&apos;ve been to this restaurant over a dozen times with no complaints to date.</text>
</sentence>
Run Code Online (Sandbox Code Playgroud)

使用XML ElementTree,我想插入一个<Opinion>具有属性的标记category=.假设我有一个字符列表list = ['a', 'b', 'c'],是否可以逐步将它们与每个文本对齐,所以我有:

<sentence id="en_BlueRibbonSushi_478218345:2">
   <text>It has great sushi and even better service.</text>
   <Opinion category='a' />
</sentence>
<sentence id="en_BlueRibbonSushi_478218345:3">
   <text>The entire staff was extremely accomodating and tended to my every need.</text>
   <Opinion category='b' />
</sentence>
<sentence id="en_BlueRibbonSushi_478218345:4">
   <text>I&apos;ve been to this restaurant over a dozen times with no complaints to date.</text>
   <Opinion category='c' />
</sentence>
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用句子id属性,但这需要对我的代码进行大量重组.基本上,我希望能够索引每个句子条目以与我的列表索引对齐.

cco*_*cco 4

您可以使用SubElement工厂函数将元素添加到树中。假设您的 XML 数据位于名为 的变量中data,这会将元素添加到您的文档树中:

import xml.etree.ElementTree as ET
tree = ET.XML(data)
for elem, category in zip(tree.findall('sentence'), ['a', 'b', 'c']):
    Opinion  = ET.SubElement(elem, 'Opinion')
    Opinion.set('category', category)

ET.dump(tree)  # prints the tree; tree.write('output.xml') is another option
Run Code Online (Sandbox Code Playgroud)