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

2024-10-03 15:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在Python中的一些非常复杂的XML和平面文件格式之间进行双向转换。我不知道在2011年解决问题有多远。在

我已经对各种pythonxml库进行了更新,但是距离上次在xslthell中工作已经8年了,在google上搜索这些仍然很常见的库之后,我感到很惊讶。在

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

我想用Python来做这个,因为文档不是直接映射,需要一些处理和计算。但我还是希望尽可能多的传递给规则引擎。在

编辑:为了清楚起见,我对技术感兴趣的程度超过了特定的库或工具,但请把它们也张贴出来。我努力避免这个词的模式,但这肯定是一个常见的问题。在

编辑2:我仍然不认为在一般技术上有什么好的答案,但是我最初的问题是通过使用Bots-EDI框架进行文档翻译来解决的。它非常注重EDI,但可以用于泛型翻译。不过,这是一个沉重的解决方案。在


Tags: 数据文档引擎编辑距离规则google双向
3条回答

嗨,迪米特里,我用lxml在python中操作xml。在

我发布了一些管理大量xml模式、名称空间等的技术。。Automatic XSD validation

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

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

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

如果我不使用/Person/name并且稍后复杂类型更改为:

^{pr2}$

出现“name”的原因存在于多个地方。在

还要注意本例中允许许多“人”的模式。您可能需要在xpath中提供一个“key”,以确定您引用的是哪个人。在xml中可以有5到6个人xpath是相同的,但是uniqe的名字将是您用来引用每个特定人的密钥。在

我还建议围绕lxml编写适合您需要的包装器函数。我做的是我创造了一个XML实用程序包含我需要的xml泛型函数的文件。然后我创建了一个我的xml.py对我的特定xml和行为有假设的文件。这个XML实用程序函数只接受xml内容(如果我决定使用某个东西而不是lxml,这很容易更改)。在

希望这些能有所帮助。希望我能帮得上忙,但问题是开放式的。在

对于python,下面是可用XML库/模块的全面列表:

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

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

http://xmlstar.sourceforge.net/

与任何命令行工具一样,这不是专门为Python设计的,而是可以很容易地集成到Python脚本中。在

尽管它只对编写XML有用,但是XMLwitch却非常惊人。对于非XML到XML的转换,我强烈推荐它!在

相关问题 更多 >