как получить эти элементы XML с libxml2? - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть структура 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 ]

5 голосов
/ 09 ноября 2010

По умолчанию 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.

2 голосов
/ 22 сентября 2012

Использование xmlNextElementSibling. При применении к foo1 он дает вам foo2.

Или перебрать все дочерние элементы while (child->next) и обработать только узлы с заданными type.

0 голосов
/ 09 ноября 2010
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
...