Python-在谷歌应用引擎中使用外部XSLT文件



我正在将MathJax用于Python/Google应用引擎CRUD Web应用程序。我希望人们使用Content-MathML创建方程(这样网络应用程序就可以在其他地方利用语义信息)。

然后我想使用这个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的内容粘贴为字符串文字(它太大了,并且有两种类型的引号)。

我该如何处理?

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

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

我不熟悉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))

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

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

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

https://github.com/kennethreitz/requests

我还没有从谷歌应用程序引擎中做到这一点,尽管我确实在heroku上运行了类似的代码。

最新更新