我需要在Python中的一些非常复杂的XML和平面文件格式之间进行双向转换。我已经过时了,不知道人们在2011年的未来一年中如何解决这个问题。
我已经掌握了各种Python XML库的最新版本,但是自从我上次在XSLT中度过了8年之后,我一直在谷歌上搜索,这仍然很常见。
那么你如何进行复杂的XML数据转换呢?
我想在Python中执行此操作,因为文档不是直接映射,并且需要进行一些处理和计算。但我仍然希望尽可能多地传递给规则引擎。
编辑:要明确我对技术的兴趣超过了特定的库或工具,但也请发布。我在努力避免使用这里的单词模式,但这肯定是一个常见的问题。
编辑2 :我仍然认为一般技术没有任何好的答案,但我使用Bots EDI框架进行文档翻译时解决了原来的问题。它非常注重EDI,但可用于通用翻译。虽然这是一个重量级的解决方案。
答案 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地狱的方法。