【问题标题】:XML parsing and usageXML解析和使用
【发布时间】:2009-11-28 22:18:36
【问题描述】:

我正在用 C++ 构建一个符合和验证的 XML 解析器,并试图使其轻量级以用于袖珍电脑。

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

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

当我尝试主要处理实体(如果定义后,其中可以包含元素、pi 和 cmets)及其分辨率时,我的疑虑出现了。

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

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

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

如果我要进行投票,请回答:您的应用程序是否需要了解 cdata 标记以及它们在 xml 文件中的位置,或者您让事情变得简单……您想知道字符串中的一个元素,而不用担心它是如何构建的?

最好的问候, 毛罗·H·莱吉里

【问题讨论】:

    标签: xml parsing xml-parsing


    【解决方案1】:

    我正在用 C++ 构建一个符合和验证的 XML 解析器,并试图使其轻量级

    没有轻量级的一致性(更不用说验证)解析器这样的东西。要成为一个符合标准的解析器,您必须了解可以放入 DTD 外部子集的所有内容,这确实是一项艰巨的工作。遗憾的是,XML 规范最终被所有 SGML DTD crud 压得喘不过气来,但我们现在坚持下去了。

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

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

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

    在尝试主要处理实体时出现了我的疑虑

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

    【讨论】:

    • 嗯...轻量级我试图在某些实现中可视化代码的差异。 Xerces 代码(不包括 io 东西等)比 system.xml 的 mono.net 实现更大。但是,就像你说的,可以制作一个完全符合 dom 级别 3 的解析器。嗯...哪种应用程序真正利用了 dom l3 结构(不包括 xml 编辑器)?
    • 很少,但不幸的是,您必须实现大部分复杂的 DTD 内容才能获得最低限度的 XML 解析器。很遗憾 XML 从 SGML 中拖出了这么多无用的 DTD 废话。我希望有一个用于轻量级工作的标准简化 XML 子集,删除所有 doctype 内容(以及默认属性和所有实体)并只允许在根元素上声明命名空间。
    • 是的......它应该存在一个轻量级规范......谢谢
    【解决方案2】:

    通常 xml 不是轻量级的。最好使用 JSON。

    【讨论】:

    • 是的,因为 C/C++ 的 json 库“非常好”……在 Web 开发中,我 10000% 同意你的看法。其他科目?嗯,没那么多。
    • 谁说过图书馆?无论如何,他都想纠正自己的问题。除了数据就是数据。无论是 Web 开发还是“其他主题”。 XML 和 JSON 只是正式定义要传输的数据的一种方式。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2019-03-15
      • 2013-02-27
      • 2017-03-16
      • 2015-06-26
      • 2016-12-11
      • 2013-02-20
      相关资源
      最近更新 更多