Python 中的 XML 或 ASCII 字符串/模板的内联?
我正在通过Python脚本生成复杂的XML文件,这些文件需要很多条件判断(比如这个例子:http://repository.azgs.az.gov/uri_gin/azgs/dlio/536/iso19139.xml)。我在处理多个XML或ASCII元数据标准,这些标准的结构往往不太好或者比较模糊。
在PHP中,我只需直接写出XML,并在需要的地方插入PHP代码片段。请问在Python中有没有简单的方法可以做到这一点?我希望能避免对所有XML进行转义。这样在模板上做小调整时也很方便,不用大改。
我稍微了解了一些Python的模板解决方案,但它们要么太死板,要么功能过于复杂。把整个XML放进一个XML对象里工作量很大,而且在更改XML或ASCII模板时灵活性也会降低。
谢谢大家的支持,特别是对新手的帮助!
4 个回答
@Gintautas 提出的使用一个好的模板引擎的建议也是我首选的方案(特别是 Mako,它的“模板语言”基本上就是 Python 加上一些标记语言;-)。
不过,很多人喜欢用其他方法来生成 XML 文件,比如通过 DOM 来写。举个例子,可以使用(为了保持在标准库中)ElementTree,或者使用一个第三方包,虽然是第三方的,但安装起来非常简单,而且很受欢迎的 BeautifulSoup(如果你用的是 Python 3,建议使用它的 3.0.x 版本!),特别是 BeautifulStoneSoup
类(BeautifulSoup
类是用来处理 HTML 的,而 stone 这个是用来处理 XML 的)。
wgrunberg,
我使用Python自带的字符串模板类,像这样:
from string import Template
the_template = Template("<div id='$section_id'>First name: $first</div>")
print the_template.substitute(section_id="anID", first="Sarah")
上面的输出结果是:
<div id='anID'>First name: Sarah</div>
在上面的例子中,我展示了一个XML模板,但任何你能用字符串描述的“模板”都可以使用。
如果你想做条件判断,可以这样写:
print the_template.substitute(section_id="theID", first="Sarah" if 0==0 else "John")
如果你的条件判断比较复杂,不要像上面那样直接写在一行里,可以考虑把它们分开写成闭包或函数。