我遇到了libxml2(版本2.7.8.13)的问题。 我正在尝试使用xmlTextReaderPtr读取器解析内存中的文档时转储节点。
因此,在解析给定节点时,我使用xmlNodeDump()来获取其全部内容,然后切换到下一个节点。 以下是我的工作方式:
[...]
// get the xmlNodePtr from the text reader
node = xmlTextReaderCurrentNode(reader);
// allocate a buffer to dump into
buf = xmlBufferCreate();
// dump the node
xmlNodeDump(buf, node->doc, node, 0 /* level of indentation */, 0 /* disable formatting */);
result = strdup((char*)xmlBufferContent(buf));
这在大多数情况下都有效,但有时结果会丢失解析节点中的一些子节点。例如,整个内存中的xml文档包含
[...]
<aList>
<a>
<b>42</b>
<c>aaa</c>
<d/>
</a>
<a>
<b>43</b>
...
</aList>
我得到类似的东西:
<aList>
<a>
<b>42</b>
</c>
</a>
</aList>
结果很好,但缺少一些数据!一大堆孩子“消失了”。 xmlNodeDump()应以递归方式转储。
的所有子级看起来像某种尺寸限制。 我想我做错了什么,但我无法弄清楚是什么。
感谢您的回答。
答案 0 :(得分:1)
我成功地以另一种方式正确实现了这一点,但我仍然不明白那里发生了什么。感谢您阅读我的问题。
仅供参考,我没有尝试修改基于xmlTextReader的现有解析代码,而是根据我的情况重写了一个小的解析模块(将所有第一级兄弟转储到单独的内存块中)。 我是通过使用libxml2的解析和树模块来实现的,所以:
Etvoilà,实际上有点直截了当。有时从头开始更容易......
我猜有一些副作用。