【问题标题】:xmlReadMemory not preserving empty nodes in original formatxmlReadMemory 不保留原始格式的空节点
【发布时间】:2018-03-16 08:33:50
【问题描述】:

我正在使用带有 C 的 libxml2 来解析 XML 格式的 const char *。当我为此字符串创建xmlDocPtr(使用xmlReadMemory(..))时,生成的xmlDocPtr 不会保留原始形式的空节点(<tag></tag>)。它将每一对合并到一个标签 (<tag/>) 中。就我而言,它正在制造问题。 有什么办法可以保留这些空节点的原始形式? 我在xmlReadMemory() 中看到了“选项”参数,但不确定是否可以将其用于此目的。

【问题讨论】:

  • 您需要以哪种方式使用 xmlDocPtr ?您需要使用它来保存文件还是解析它?为什么需要两个标签?
  • 在获得 xmlDocPtr 后,我正在对其进行转储 (xmlNodeDump)。我将在程序的稍后时间点使用转储的一部分(作为 char *)进行进一步处理。
  • 在这里看看这个函数 xmlKeepBlanksDefault():xmlsoft.org/html/libxml-parser.html#xmlKeepBlanksDefault

标签: c linux libxml2


【解决方案1】:

它将每一对合并到一个标签 () 中。就我而言,它正在制造问题。

对于它的价值,它依赖于 XML 无法保证的东西。规范说,“一个空元素的表示是一个开始标签紧跟一个结束标签,或者一个空元素标签。”

https://www.w3.org/TR/REC-xml/#sec-starttags

任何符合标准的 XML 解析器都应该将任一表示视为同一事物。我不知道是否可以更改依赖它的任何代码,但这将是最“正确”的解决方案。

我知道有时这些事情是我们无法控制的,只是想提出这个想法。

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多