最Pythonic的支持类似DOM访问的XHTML/HTML解析器/生成器/模板模块是什么?
这个工具应该能够以一种非常面向对象的方式来创建、修改和读取 X/HTML,感觉上像是操作DOM,但又不会太臃肿,而且要真正符合Python的风格。最好还能处理一些格式不正确的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许可证下自己做一个。任何帮助都非常欢迎。任何能让Python在网页应用开发中更好用的东西都很棒。非常感谢!
-Luke Stanley
2 个回答
1
Amara Bindery 提供了我见过的最符合 Python 风格的 XML 接口。你可以查看 快速参考、手册 和 常见问题解答。
5
第一部分大部分可以通过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'
第二部分可以通过创建元素对象来完成,但你需要自己做一些工作,才能让它按照你想要的方式运行:
>>> 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非常强大。
编辑:我意识到这可能不是你确切想要的。我只是想提供一个可用的替代方案,并且证明其实不需要太多工作就能做到这一点。