2

我正在寻找一个库来帮助我使用 Python 解析和转换 DTD。到目前为止,我发现的唯一东西是xmlproc,但这似乎很古老,而且似乎不支持 DTD 的序列化。Java有这个,但我更喜欢 Python 解决方案。

编辑:通过 DTD 的“序列化”,我的意思是理想情况下,我希望能够将 DTD 解析为某种 Python 结构,对该结构进行操作,然后将结果写回 DTD。

4

2 回答 2

0

我不知道用于 DTD 的端到端处理器,但是我又很少使用 DTD,所以这并不奇怪。

Amara可以解析 DTD,但我不知道您可以对它们进行什么级别的访问,或者结果是否可以序列化。我认为他们可以,但这不是基于现实的。libxml2,它在 Python 中可用,因为lxml是其他需要研究的东西,但我对此的经验更少。从 libxml 文档看来,您可以访问完整的 DTD。

另一种可能性是使用许多程序之一将 DTD 转换为 XSD,然后使用常规 XML 处理器来操作树,并将其返回给 DTD。我担心这可能会有多大的损失。

在难度越来越大的情况下,如果您要自己为 DTD 语法编写解析器,请考虑PyParsingPLY

于 2009-12-30T02:08:28.977 回答
0

您可能需要考虑将您的 DTD 转换为一种基于 XML 的格式。此时,您可以使用 ElementTree 或您喜欢的任何 XML 工具包来处理它。

我对 RelaxNG 有很好的体验,它相当简洁明了。其网站上有一个转换工具列表:http ://relaxng.org/#conversion

如果您更喜欢 XML Schema,以下是可用的:http ://www.w3.org/XML/Schema

如果您正在处理第三方文档或 DTD,这可能不适合您。如果是在内部,请试一试。基于 XML 的模式使用起来更愉快。

于 2009-12-30T06:27:12.923 回答