使用 lxml 库在 for 循环内标记
Tag inside for loop using lxml library
from lxml import etree
def generate_header(self):
root = etree.Element('TAG1',)
for inv in self.env['account.invoice'].search([]):
po_code = etree.SubElement(root, 'data').text = str(inv.id)
return root
如何在 for 循环中添加另一个标签。如果我将 root 放在 for 循环中,那么它会为 1 条记录生成 xml 文件。我需要它看起来像这样。
<tag1>
<tag2>
<data>my data<data>
</tag2>
</tag1>
通过我的代码,我得到了
<tag1>
<data>my data<data>
</tag1>
我只需要在 for 循环中使用与 tag1 相同的标签
这适用于您想要的任意数量的标签:
from lxml import etree
def do(n_of_tags, inner_tag_name, inner_tag_text, starting_tag_num=1):
i = starting_tag_num
# create root outside loop
root = etree.Element('tag{}'.format(i))
parent = root
i+= 1
while i <= n_of_tags:
# append next tag to parent and make the new tag parent
parent.append(etree.Element('tag{}'.format(i)))
parent = parent.getchildren()[0]
i+= 1
# add your own tag to last parent with text
etree.SubElement(parent,inner_tag_name).text = inner_tag_text
return root
r = do(2,'data','my data')
# just to see if it works
with open('test.xml','wb') as w:
w.write(etree.tostring(r,pretty_print=True))
from lxml import etree
def generate_header(self):
root = etree.Element('TAG1',)
for inv in self.env['account.invoice'].search([]):
po_code = etree.SubElement(root, 'data').text = str(inv.id)
return root
如何在 for 循环中添加另一个标签。如果我将 root 放在 for 循环中,那么它会为 1 条记录生成 xml 文件。我需要它看起来像这样。
<tag1>
<tag2>
<data>my data<data>
</tag2>
</tag1>
通过我的代码,我得到了
<tag1>
<data>my data<data>
</tag1>
我只需要在 for 循环中使用与 tag1 相同的标签
这适用于您想要的任意数量的标签:
from lxml import etree
def do(n_of_tags, inner_tag_name, inner_tag_text, starting_tag_num=1):
i = starting_tag_num
# create root outside loop
root = etree.Element('tag{}'.format(i))
parent = root
i+= 1
while i <= n_of_tags:
# append next tag to parent and make the new tag parent
parent.append(etree.Element('tag{}'.format(i)))
parent = parent.getchildren()[0]
i+= 1
# add your own tag to last parent with text
etree.SubElement(parent,inner_tag_name).text = inner_tag_text
return root
r = do(2,'data','my data')
# just to see if it works
with open('test.xml','wb') as w:
w.write(etree.tostring(r,pretty_print=True))