将多个相同的xml子元素添加到现有父元素

时间:2014-08-08 16:30:24

标签: python lxml lxml.objectify

我正在尝试使用逗号分隔列表[Action,Adventure,Family],并为列表中的每个项目在标记内创建一个新标记。

所需的输出:

<genres>
   <genre>Action</genre>
   <genre>Adventure</genre>
   <genre>Family</genre>
</genres>

我现有的易于使用的代码如下:

root = objectify.fromstring(xml)   # genres is an object at this point
.
.
.
for g in self.s.cell(self.r,self.d['Genre']).value.split() :
   root.product.genres.genre = g.rsplit(",")
.
.
.

注意:以上for循环所做的就是覆盖单个标签并产生以下结果:

<genres>
   <genre>Family</genre>    # last member of the list
</genres>

我也尝试了以下内容,它也没有用:

for g in self.s.cell(self.r,self.d['Genre']).value.split() :
   genre = objectify.fromstring('<genre />')
   genre = g.rstrip(",")
   root.product.genres.append(genre)

提前感谢您的协助。

2 个答案:

答案 0 :(得分:0)

对于相同的标签,lxml会将它们存储在列表中。试试这个:

root = objectify.fromstring(xml)   # genres is an object at this point

n = 0

for g in self.s.cell(self.r,self.d['Genre']).value.split() :
   root.product.genres.genre[n] = g.rsplit(",")
   n += 1

答案 1 :(得分:0)

感谢您的回复。我想出了另一种方法:

for g in self.s.cell(self.r,self.d['Genre']).value.split() :
    genre = et.Element("genre")
    genre.text = g.rstrip(",")
    root.product.genres.append(genre)