2011-06-02 86 views
5

我有一个旧的python应用程序,用于使用XSLT转换某些XML数据(两种类型的xml文件及其各自的xslt)来生成html输出。如何巧妙地重写曾经使用XSLT的python脚本?

我想将此应用移植到appengine,但是,可悲的是,appengine的python版本不支持xslt。

有没有一种简单的方法来重写我的代码,而无需手动解析并检查xml输入中的给定标签?

换句话说,你有什么想法做到这一点的通用方法?

感谢和抱歉我的可怜的英语!

+0

你的英语很棒,不要低估自己。 – 2011-06-02 23:33:16

+0

谢谢@Rafe,它实际上是我学过的第四种语言。所以,我尽我所能:) – Liza 2011-06-02 23:34:27

+0

你需要在服务器端做到吗?否则,你可以在客户端使用JavaScript来做到这一点。 – 2011-06-03 04:21:57

回答

2

不幸的是,在纯python中没有可行的XSLT实现。您可能能够使您的python代码在jython上运行,从而使您可以访问java的XSLT实现。这在blog post中描述。

您必须决定将您现有的代码移植到jython中是否比编写您自己的特定于案例的xml解析器/转换器更好。

+0

谢谢安东尼,我实际上已经在这篇博客文章中,但是看起来很难在GAE上设置jyton(我从来没有用过btw)。无论如何感谢:) – Liza 2011-06-03 00:00:53

+0

这不是一个斗争。您只需下载一个zip文件,将其解压缩到一个目录结构中,移动几个文件,使用一个“jar”命令创建一个WAR文件,然后上传到AppEngine。这些指令在这里[Google AppEngine上的Jython](http://opensource.xhaus.com/projects/1/wiki/ModjyGoogleAppEngine) – 2011-09-10 14:27:45

0

你可以使用lxml来做XSLT转换,AND lxml应该可以在老的python版本中工作(网站上说它支持2.3到3.2)。

+0

'lxml'是C库的包装,不是纯Python;因此它不能在AppEngine上使用。 – 2011-06-03 18:15:53

0

如果你的XSLT文件都没有太可怕,它可能不是非常难用的ElementTree的iterparse功能他们端口到Python(http://effbot.org/zone/element-iterparse.htm,看看http://www.dalkescientific.com/writings/diary/archive/2006/11/06/iterparse_filter.html)。

您必须将XSLT模板重写为可在分析期间调用的Python函数,因为遇到元素“events”,并且您可能必须存储某些文档状态以允许某些类型的xsl:template/@ match模式要处理,但它可能不会太讨厌。

相关问题