我正在使用C ++构建一个符合要求且经过验证的XML解析器,并尝试使其在Pocket PC中使用。

一开始我决定添加一些“事件”。我的解析器就像SAX一样,通知元素,处理指令等。

此事件由构建xml的DOM树的派生类获取。

在尝试处理主要实体(可以包含元素,pi和内部注释,如果已定义)及其解决方案时,我会出现疑问。

例如,我可以创建一个XMLEntityRef类,它引用某些XMLDocType对象中定义的某些XMLEntity,如.NET system.xml解析器。

据我所知,在大多数情况下,应用程序需要知道一个元素,它的内容,它各自的属性和它们各自的值...只有字符串...它不关心元素内容是否由cdata对象构成,实体引用和/或纯文本......同样适用于属性值。

所以,我的问题如下:将每个xml对象传递给应用程序并将其(或辅助类)构建为什么,例如,通过连接文本并解析得到的属性值,有什么好处?实体参考?

如果我正在进行投票,请回答:您的应用程序是否需要了解cdata标签以及它们在xml文件中的位置,或者您可以轻松实现...您想知道完整的内容值字符串中的元素而不用担心它是如何构建的?

祝你好运, Mauro H. Leggieri

有帮助吗?

解决方案

  

我正在用C ++构建一个符合要求且经过验证的XML解析器,并尝试使其轻量级

没有轻量级符合(从不介意验证)解析器这样的东西。要成为一个符合标准的解析器,你必须了解DTD外部子集中可以存在的所有东西,这确实是非常有用的。令人遗憾的是,XML规范最终导致所有SGML DTD崩溃,但我们现在仍然坚持使用它。

  

您的应用程序是否需要了解cdata标记及其在xml文件中的位置

通常没有。 DOM Level 3 LS确实要求CDATA部分默认在DOM中保留CDATASection节点,但几乎没有应用程序关心。

(如果问题是关于我的应用程序那么是的,因为我的应用程序是一个模板系统,它将CDATA部分保留在原来的位置。但仍然。)

  

在尝试处理主要实体

时出现了疑问

上帝是的。实体引用是一场彻底的灾难。使DOM实现以符合DOM Level 3 Core / LS的方式支持它们非常复杂。尽可能避免。

其他提示

一般来说xml重量不轻。你最好用JSON。

在构建解析器时,我认为您不应该假设应用程序将如何使用xml,而是为每个xml节点提供最精细的数据级别以提供最大的灵活性。虽然这可能需要消费应用程序的更多工作,但他们将能够完成他们需要的任何事情。祝好运。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top