使用lxml将文本插入表中

时间:2016-05-16 10:42:24

标签: python lxml

我正在尝试使用lxml将文本插入到html表中。

表很简单,它有一个标题。我想解析一个项目列表,每个项目都应该在表格中有一行。就这样:

--------
| HEAD |
--------
| Item |
--------
| Item |
--------

我创建了一个采用路径和模板的函数。该路径用于保存页面,模板是用于插入数据的.html。我的代码如下所示:

def genereate_page(path, template):
    tree = html.parse(template)
    root = tree.getroot()

    items = ['Item1', 'Item2', 'Item3', 'Item4']

    table = root.findall('.//*[@table="results"]')

    for i in items:
        row = etree.Element('tr')
        data = etree.Element('td')
        data.text = i
        row.append(data)
        table.append(row)

    with open(path, 'w') as f:
        f.write(etree.tostring(root, pretty_print=True).decode('utf-8'))

我的模板文件如下所示:

<html>
  <head>
    <title>example</title>
  </head>
  <body>
    <table id="results">
      <tr id="header_row">
        <th>Test</th>
    </table>
  </body>
</html>

所有内容都会编译,并且没有给出错误,但是没有插入任何文本。我只是返回了模板,然而它关闭了header_row,所以发生了一些事情。如何使用lxml?

将项目列表中的文本插入表格中

1 个答案:

答案 0 :(得分:2)

目前table变量是一个列表,而table.append()只是将项目添加到列表中。由于HTML中只有一个表格,因此您可以使用find()代替findall()来获取表格元素,然后正确地将子元素附加到其中:

table = root.find('.//*[@id="results"]')

for i in items:
    row = etree.Element('tr')
    data = etree.Element('td')
    data.text = i
    row.append(data)
    table.append(row)