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

前端之家收集整理的这篇文章主要介绍了什么是最支持DOM访问的Pythonic XHTML / HTML解析器/生成器/模板模块?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
它应该能够以高度面向对象的方式创建,修改和读取X / HTML,仍然感觉DOM喜欢但不是肥胖,并且真的是 Pythonic.
最好它也会处理格式错误的HTML,但我们可以跳过这个模板.

例如,我想这样做:

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

我应该能够使用/定义短函数并像这样使用它们:

  1. >> html.head.append(stylesheet(href="main.css"))
  2. >> html.body.append(h1('BIG TITLE!12',Class="roflol"))
  3. >> html.body.SOURCE
  4. <body>
  5. <h1 class="roflol">
  6. BIG TITLE!12
  7. </h1>
  8. </body>

注意:如果它不存在,我将使用BSD / MIT / Python许可证.非常欢迎帮助.
任何有助于更多Pythonic Web应用程序开发的东西都会很棒.
非常感谢!

-Luke Stanley

解决方法

第一部分大部分可以在 ElementTree之前完成,但需要更多步骤:
  1. >>> import xml.etree.ElementTree as ET
  2. >>> html = ET.XML('<html><head><title>Hi</title></head><body></body></html>')
  3. >>> html.head = html.find('head')
  4. >>> html.head.append(ET.XML('<link type="text/css" href="main.css" rel="stylesheet" />'))
  5. >>> html.head.title = html.head.find('title')
  6. >>> html.head.title.text
  7. 'Hi'

第二部分可以通过创建Element对象来完成,但是你需要做一些自己的工作来使它按照你真正想要的方式发生:

  1. >>> html.body = html.find('body')
  2. >>> my_h1 = ET.Element('h1',{'class': 'roflol'})
  3. >>> my_h1.text = 'BIG TITLE!12'
  4. >>> html.body.append(my_h1)
  5. >>> html.body.SOURCE = ET.tostring(html.body)
  6. >>> html.body.SOURCE
  7. '<body><h1 class="roflol">BIG TITLE!12</h1></body>'

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

  1. >>> def stylesheet(href='',type='text/css',rel='stylesheet',**kwargs):
  2. ... elem = ET.Element('link',href=href,type=type,rel=rel)
  3. ... return elem
  4. ...
  5. >>> html.head.append(stylesheet(href="main.css"))

整个文件

  1. >>> ET.tostring(html)
  2. <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非常强大.

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

猜你在找的HTML相关文章