在Python中进行XML转换的现代方法是什么?

时间:2011-09-15 06:01:24

标签: python xml document transform xslt

我需要在Python中的一些非常复杂的XML和平面文件格式之间进行双向转换。我已经过时了,不知道人们在2011年的未来一年中如何解决这个问题。

我已经掌握了各种Python XML库的最新版本,但是自从我上次在XSLT中度过了8年之后,我一直在谷歌上搜索,这仍然很常见。

那么你如何进行复杂的XML数据转换呢?

我想在Python中执行此操作,因为文档不是直接映射,并且需要进行一些处理和计算。但我仍然希望尽可能多地传递给规则引擎。

编辑:要明确我对技术的兴趣超过了特定的库或工具,但也请发布。我在努力避免使用这里的单词模式,但这肯定是一个常见的问题。

编辑2 :我仍然认为一般技术没有任何好的答案,但我使用Bots EDI框架进行文档翻译时解决了原来的问题。它非常注重EDI,但可用于通用翻译。虽然这是一个重量级的解决方案。

4 个答案:

答案 0 :(得分:1)

对于python,这里有一个可用的XML库/模块的综合列表:

http://wiki.python.org/moin/PythonXml

如果您正在寻找比XSLT更简单的东西,XMLStarlet是一组可能对您感兴趣的命令行工具:

http://xmlstar.sourceforge.net/

作为任何命令行工具,这不是特别适用于Python,但可以很容易地集成到python脚本中。

答案 1 :(得分:1)

虽然它只对编写XML有用,但XMLwitch令人惊讶。为了进行非XML到XML的转换,我强烈推荐它!

答案 2 :(得分:0)

Hi Dimitre我使用lxml来操作python中的xml。

我发布了一些管理大量xml架构,命名空间等的技术。Automatic XSD validation

一个建议是尽可能尝试使用完整的xpath。

例如,如果我有一个复杂的类型:

<Person>
 <name/>
 <age/>
</person>

如果我不使用/Person/name而后来该复杂类型更改为:

,我可能会遇到此问题
<person>
 <name/>
 <age/>
 <child>
   <son>
     <name/>
     <age/>
   </son>
</child>
</person>

现在“名称”的原因存在于多个地方。

还要注意在此示例中允许许多“人”的模式。您可能需要在xpath中提供“密钥”以确定您引用的是哪个人。你的xml中可能有5或6个人,xpaths是相同的,但名称是uniqe,这个名称将是你用来引用每个特定人的关键。

我还建议在lxml周围编写自己的包装函数,以满足您的需求。我做的是我创建了一个xmlUtil.py文件,其中包含我需要的xml泛型函数。然后我创建了一个myXML.py文件,该文件假设我的特定xml和行为。 xmlUtil.py函数只接受xml内容(这是因为我决定使用一些东西而不是lxml,它很容易改变)。

希望其中一些有帮助。希望我能提供更多帮助,但问题是非常开放的。

答案 3 :(得分:0)

虽然它也只是&#39;一个库 - 或者更确切地说是一个框架,inxs是一种通过Python进行基于规则的转换来避免XSLT地狱的方法。