什么是最支持DOM访问的Pythonic XHTML / HTML解析器/生成器/模板模块?

它应该能够以高度面向对象的方式创建,修改和读取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应用程序开发的东西都会很棒.
非常感谢!

-Luke Stanley

解决方法

第一部分大部分可以在 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>'

您可以创建自己的样式表函数

>>> 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非常强大.

编辑:我意识到这可能不是你想要的.我只想提供一些可用的替代方案,并证明它实际上可以在没有太多工作的情况下完成.

相关文章

Mip是什么意思以及作用有哪些
怎么测试Mip页面运行情况
MIP安装的具体步骤有哪些
HTML添加超链接、锚点的方法及作用详解(附视频)
MIP的规则有哪些
Mip轮播图组件中的重要属性讲解