它应该能够创建修改以高度面向对象的方式阅读 X/HTML,该方式仍然感觉DOM像但并不肥胖,并且实际上是 Pythonic
最好也可以处理格式错误的HTML,但是我们可以跳过模板。

例如,我想这样做:

>> from someAmazingTemplate import *
>> html = Template('<html><head><title>Hi</title></head><body></body></html>')
>> html.head.append('<link type="text/css" href="main.css" rel="stylesheet" />')
>> html.head.title
Hi
>> html['head']['title']
Hi

我应该能够使用/定义短函数并像这样使用它们:
>> html.head.append(stylesheet(href="main.css"))
>> html.body.append(h1('BIG TITLE!12',Class="roflol"))
>> html.body.SOURCE
<body>
    <h1 class="roflol">
        BIG TITLE!12
    </h1>
</body>

注意:如果不存在,我将使用BSD/MIT/Python许可进行制作。我们非常欢迎您的帮助。
任何有助于Pythonic Web应用程序开发的东西都将是很棒的。
非常感谢!

-斯坦利·卢克

最佳答案

第一部分大部分可以由ElementTree完成,但需要执行更多步骤:

>>> import xml.etree.ElementTree as ET
>>> html = ET.XML('<html><head><title>Hi</title></head><body></body></html>')
>>> html.head = html.find('head')
>>> html.head.append(ET.XML('<link type="text/css" href="main.css" rel="stylesheet" />'))
>>> html.head.title = html.head.find('title')
>>> html.head.title.text
'Hi'

第二部分可以通过创建Element对象来完成,但是您需要做一些自己的工作才能使其按照您真正想要的方式发生:
>>> html.body = html.find('body')
>>> my_h1 = ET.Element('h1', {'class': 'roflol'})
>>> my_h1.text = 'BIG TITLE!12'
>>> html.body.append(my_h1)
>>> html.body.SOURCE = ET.tostring(html.body)
>>> html.body.SOURCE
'<body><h1 class="roflol">BIG TITLE!12</h1></body>'

您可以创建自己的stylesheet函数:
>>> def stylesheet(href='', type='text/css', rel='stylesheet', **kwargs):
...     elem = ET.Element('link', href=href, type=type, rel=rel)
...     return elem
...
>>> html.head.append(stylesheet(href="main.css"))

以及整个文件:
>>> ET.tostring(html)
<html><head><title>Hi</title><link href="main.css" rel="stylesheet" type="text/css" /></head><body><h1 class="roflol">BIG TITLE!12</h1></body></html>

但是,我认为如果您最终要编写自己的东西,那么这是一个不错的起点。 ElementTree非常强大。

编辑:我意识到这可能与您要查找的不完全相同。我只是想提供一些可用的替代方法,并证明它实际上可以完成而无需太多的工作。

10-07 14:32