1

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>
4

2 回答 2

2

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

于 2013-01-08T08:47:01.283 回答
1

而我认为允许重新排序的 DOM。

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

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

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

于 2013-01-09T04:21:08.410 回答