libxml2是否维护文档顺序?

时间:2013-01-08 08:42:07

标签: c++ c xml libxml2

IIRC,有两种XML解析器:DOM和SAX。 SAX需要从上到下解析XML文档而不需要任何形式的重新排序(并且基于事件),而DOM 我相信可以重新排序。

这是对的吗?阅读从xmlDocPtr返回的xmlReadFile可能会失灵(我假设libxml2是SAX或DOM;它可能是它自己的东西)。

例如:

<!-- original document, in order -->
<xml>
    <element>1</element>
    <element>2</element>
    <element>3</element>
</xml>

<!-- document as it appears in memory (DOM) -->
<xml>
    <element>3</element>
    <element>1</element>
    <element>2</element>
</xml>

2 个答案:

答案 0 :(得分:2)

libxml2支持DOM和SAX解析。它的DOM解析器实际上是在其SAX解析器之上构建的。因此DOM输出将保持文档顺序。我从来没有听说过重新排序XML节点的DOM解析器。

答案 1 :(得分:1)

  

虽然DOM我认为可以重新订购。

XML规范说XML元素的顺序很重要,因此任何XML API都应该维护元素的顺序。

作为附注,一次排序IS不重要是对属性的排序,例如<termdef id="dt-dog" term="dog"/>可以<termdef term="dog" id="dt-dog"/>

出现

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