如何使用libxml2获取这些XML元素?

时间:2010-11-09 15:39:56

标签: xml libxml2

我有一个XML结构:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<root>
<item>
    <foo1>1</foo1>
    <foo2>2</foo2>
</item>
<item>
    <foo1>3</foo1>
    <foo2>4</foo2>
</item>
</root>

现在我把所有孩子都带上for循环:

for (pCurrentElement...) {

}

现在我想访问throw pCurrentElement foo1和foo2,但我不知道怎么做。 我使用 LIBXML2

我可以通过以下方式获得foo1:

pChildElement = pCurrentElement->children->next;
pChildElement->children->content // foo1

但我现在不知道如何获得foo2?

3 个答案:

答案 0 :(得分:5)

默认情况下,libxml2将文档中的空白分析为自己的子节点。如果foo1和foo2前面有空格,则foo1为pCurrentElement->children->next,foo2为pCurrentElement->children->next->next->next

如果您使用xmlKeepBlanksDefault(0)xmlReadDoc(..., XML_PARSE_NOBLANKS)禁用空格分析,则foo1将为pCurrentElement->children而foo2将为pCurrentElement->children->next

答案 1 :(得分:2)

使用xmlNextElementSibling。应用于foo1后,它会为您提供foo2

或遍历所有子项while (child->next)并仅处理给定type的节点。

答案 2 :(得分:0)

pChildElement = pCurrentElement->children->next; //if this is pointing to <item>
pChildElement->children->content // foo1  // this is <item>->children->first element (which is foo1)

如此自然

pChildElement->children->next->content would be the next sibling of foo1, which is foo2