【问题标题】:XML ElementTree - indexing tagsXML ElementTree - 索引标签
【发布时间】:2017-08-23 02:00:36
【问题描述】:

我有一个 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>

使用 XML ElementTree,我想插入一个标签 &lt;Opinion&gt;,它的属性为 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>

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

【问题讨论】:

  • 属性是一个字典。不保证以任何方式保留字典顺序。
  • 哦,我明白了。与验证器一起工作(作为黄金标准进行检查),因此无需更改。谢谢!
  • 你能做一个可重现的例子吗?

标签: python xml elementtree xml.etree


【解决方案1】:

您可以使用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

【讨论】:

  • zip 将在传入的最短迭代用完时停止,因此不需要您建议的切片(因为它不会有任何区别)。无论如何,我假设 OP 有一些更有趣的方式来生成类别列表。
  • 这正是我所需要的。谢谢一百万!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2020-04-17
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
相关资源
最近更新 更多