什么';什么是最具python风格的XHTML/HTML解析器/生成器/模板模块,支持类似DOM的访问?

什么';什么是最具python风格的XHTML/HTML解析器/生成器/模板模块,支持类似DOM的访问?,python,dom,xhtml,parsing,template-engine,Python,Dom,Xhtml,Parsing,Template Engine,它应该能够以一种高度面向对象的方式创建,修改和阅读X/HTML,这种方式仍然感觉像DOM,但不肥胖,而且真正是Pythonic。 最好它也能处理格式错误的HTML,但我们可以跳过这个模板 例如,我想这样做: >> from someAmazingTemplate import * >> html = Template('<html><head><title>Hi</title></head><body>

它应该能够以一种高度面向对象的方式创建修改阅读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
>来自someAmazingTemplate导入*
>>html=模板('Hi')
>>html.head.append(“”)
>>html.head.title
你好
>>html['head']['title']
你好
我应该能够使用/定义短函数,并像这样使用它们:

>> 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>
>html.head.append(样式表(href=“main.css”))
>>append(h1('BIG TITLE!12',Class=“roflol”))
>>html.body.SOURCE
大标题!12
注意:如果它不存在,我将在BSD/MIT/Python许可下创建它。欢迎帮助。 任何朝着更具python风格的web应用程序开发方向发展的东西都将是伟大的。 非常感谢


-Luke Stanley提供了我见过的最具Python风格的XML API。请参见,并且

第一部分大部分可以由完成,但还需要几个步骤:

>>> 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'
以及整个文件:

>>> 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>
>ET.tostring(html)
HiBIG标题!12
但是,我认为如果你最终要写你自己的东西,这是一个好的开始。ElementTree非常强大


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

Amara Bindery、pyWeb和BeautifulSoup正在接受调查。我想我必须把它们包装在一起才能得到真正优雅的东西。Synack的ElementTree示例也显示了一个很好的基础,我将在这里发布进展非常感谢Synack。我将尝试看看是否可以将其转换为我用一些包装器指定的内容。你想保持最新吗?我将在这里发布一篇后续文章。当然,我很想看看结果如何。我觉得这听起来很有趣。我实际上是把它作为MVC的一部分。我想用它作为中介模型。不过,我也不反对使用模板语言。如果与PyJS(睡衣)结合,它可能是一个非常强大的野兽。不过我也想用一点JQuery。如果是这样的话,你考虑过Django吗?它有自己的模板系统,非常容易使用,功能强大,可扩展。我考虑了Django、TurboGears、Pylons和其他一些。这太复杂了,我想要一些人们能马上学会的东西。我正在用部分web技术构建一个语义桌面平台,但我不想让我或其他开发人员花时间关注随机细节,这些细节与使用html不一样。find('head')而不是html.head-他们还需要考虑其他事情。我们有蟒蛇!我很高兴忘记HTML和Javascript是在幕后使用的。这只是模型的一层。我正在构建一个生命地图应用程序:你知道这看起来是最有希望的,现在我有更多的时间来比较它。它是在我的HTML开始插入的。我现在正在寻找一个解决方案。我编译了最新版本,然后它成功了:>>>>来自amara import*>>>doc=parse('Hi')>>>print doc.xml\u encode((“html缩进”))Hi更多示例和包装动作如果您以后进一步使用它,我也很想听听您喜欢什么和不喜欢什么。也许用你最后做的事情来更新你的问题。链接已经失效。
>>> 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>