我有一个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?
答案 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