lxml的E-factory是否支持动态生成的数据?

时间:2015-06-30 16:35:22

标签: python html lxml

有没有办法用lxml的E-factory动态创建标签?例如,我收到以下代码的语法错误:

data: form.serialize()

我收到以下错误:

E.BODY(
        E.TABLE(
            for row_num in range(len(ws.rows)):
                row = ws.rows[row_num]

                # create a tr tag
                E.TR(
                    for cell_num in range(len(row)):
                        cell = row[cell_num]

1 个答案:

答案 0 :(得分:4)

要创建多个子节点,请传递multiple positional or keyword arguments

工作示例:

from lxml.builder import ElementMaker
from lxml.html import tostring

E = ElementMaker()

body = E.BODY(
    E.TABLE(
        *[E.TR(
            *[
                E.TD("%s %s" % (row_num, col_num)) for col_num in range(3)
            ]
        ) for row_num in range(2)]
    )
)

print tostring(body, pretty_print=True)

打印:

<BODY><TABLE>
<TR>
<TD>0 0</TD>
<TD>0 1</TD>
<TD>0 2</TD>
</TR>
<TR>
<TD>1 0</TD>
<TD>1 1</TD>
<TD>1 2</TD>
</TR>
</TABLE></BODY>

作为旁注,根据我的理解,您希望创建一个HTML文件,其中包含来自已解析的Excel文件的数据。您可以使用jinja2mako等模板引擎更好,更轻松地解决问题,而不是使用lxml创建元素。