Python - 在Google App Engine中使用外部XSLT文件

时间:2012-01-14 22:18:04

标签: python google-app-engine lxml mathml

我正在使用MathJax作为Python / Google App Engine CRUD webapp。我希望人们使用Content MathML创建方程式(以便webapp可以利用其他地方的语义信息)。

然后我想使用this Content-to-Presentation MML XSLT,以便我可以在生成的Presentation MathML上使用MathJax。

通常情况下,我会做这样的事情来提供转型服务:

import lxml.etree as etree

class MathMLTranslator(object):
    def __init__(self):
        with open('ctop.xsl') as f:
            self.xslt = etree.XSLT(etree.XML(f.read()))

    def translate(self, xml_string):
            return self.xslt(etree.XML(xml_string))

但是我无法在Google App Engine中执行open('ctop.xsl'),也无法在MathMLTranslator中将ctop.xsl的内容粘贴为字符串文字(它太大且有两种类型的引号)。

我该如何处理?

3 个答案:

答案 0 :(得分:1)

您可以在App Engine上打开作为应用程序的一部分上传的文件 - 您只需确保路径是相对于应用程序的。例如,如果ctop.xsl与Python模块位于同一目录中,则可以执行以下操作:

fh = open(os.path.join(os.path.dirname(__file__), 'ctop.xsl')

答案 1 :(得分:0)

我不熟悉GAE,但是如果你可以上传任意大小的Python文件,你可以只将ctop.xsl内容写入.py文件。例如ctop_data.py

ctop_xsl = """<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
... SKIPPED
"""

然后在代码中你可以:

from ctop_data import ctop_xsl
...
self.xslt = etree.XSLT(etree.XML(ctop_xsl))

答案 2 :(得分:-1)

您可以将文件放在Dropbox上并使用dropbox API:

https://www.dropbox.com/developers/reference/api#files-GET

我建议用于此目的的python请求:

https://github.com/kennethreitz/requests

我没有从谷歌应用引擎做到这一点,虽然我确实在heroku上运行代码做类似的事情。