在 Python 中生成 HTML/XML?

Generate HTML/XML in Python?

我正在使用 Python 以编程方式生成 HTML。我要生成的 HTML 是这样的:

<p>Hello <b>world</b> how are you?</p>

但是,我不知道如何在<b>标签前添加hello和粗体标签后的字符串how are you?

我的代码如下所示:

from xml.etree import ElementTree

p = ElementTree.Element('p')

b = ElementTree.Element('b')
b.text = 'world'

p.append(b)

我应该在哪里添加 hellohow are you?段落元素只有一个 p.text 字段,在构建文档时似乎没有办法穿插文本和其他 HTML 标签。

如何以编程方式生成标签和文本混合在一起的 HTML 文档?

您可以这样做,但您需要将文本片段放入 <span> 标签中。在我看来,这只是个坏主意。 HTML 不是 XML。有更好的工具。

import sys
from xml.etree import ElementTree as ET

html = ET.Element('html')
body = ET.Element('body')
html.append(body)
para = ET.Element('p')
b1 = ET.Element('span')
b1.text = "Hello"
b2 = ET.Element('b')
b2.text = "world,"
b3 = ET.Element('span')
b3.text = "how are you?"
para.append(b1)
para.append(b2)
para.append(b3)
html.append(para)

ET.ElementTree(html).write(sys.stdout, encoding='unicode', method='html')

无论lenient/permissive渲染引擎对HTML的解析如何,OP都在问如何负责任地构建结构化文本。

下面是如何使用 ElementTree 的 TreeBuilder class 构建结构,非常简单:

#!/usr/bin/env python3
#!/usr/bin/env python3
import xml.etree.ElementTree as ET

builder = ET.TreeBuilder()
builder.start('p', {})
builder.data('Hello ')
builder.start('b', {})
builder.data('world')
builder.end('b')
builder.data(' how are you?')
builder.end('p')

root = builder.close()  # close to "finalize the tree" and return an Element

ET.dump(root)  # print the Element

物有所值,我明白了

<p>Hello <b>world…

非常类似于

<para>Hello <emphasis>world…

在文档中 XML。