libxml - 循环遍历孩子的所有孩子

时间:2011-03-31 08:48:45

标签: objective-c cocoa-touch libxml2

我是libxml的新手。我想写一个循环来遍历子节点的所有子节点等,例如

<par>i want to <bold>loop <italic>through </italic> all</bold> children in this node</pa R&GT;

目前我的循环代码如下所示,但我只得到“粗体”节点,而不是“斜体”节点。

    if (xmlStrEqual(node->name, BAD_CAST "p")) {

    xmlNodePtr child = node->children;

        while (child != NULL) {

            child = child->next;
        }
    }

可以想象节点结构可以增长到4-5个元素,因此我需要一个更强大的解决方案,将while循环放入while循环中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您正在使用的xmlTree界面是heirarchical。 &LT;帕&GT;有3个孩子 - &lt; bold&gt;之前的文字,&lt; bold&gt;本身,以及之后的文字。 &LT;粗体&GT;有自己的孩子,包括&lt; italic&gt;。 node-&gt; children列表仅包含节点的 immediate 子节点。

有几种方法可以获得您想要的行为。

  • 在处理孩子时,您可以递归处理孩子 - >孩子以获得&lt; bold&gt;的孩子,其中包括&lt; italics&gt;

  • 如果您正在寻找特定的&lt; itallic&gt; (或者对于一组特定节点),您可以使用XPath表达式,例如“par // italic”来查找par之下任何位置的任何斜体节点。 http://www.xmlsoft.org/examples/index.html#XPath

  • 您可以查看libxml2的xmlTextReader接口而不是此xmlTree。它提供了您期望的文档的串行“读取”。 http://xmlsoft.org/xmlreader.html

每种方法都有自己的优点/缺点,具体取决于您尝试对应用程序执行的操作。