Я анализирую XML-файл с помощью libxml2, проблем с поиском элемента нет. Но верните xmlNodePtr (cur_node) вызывающей стоLinux

Ответить Пред. темаСлед. тема
Anonymous
 Я анализирую XML-файл с помощью libxml2, проблем с поиском элемента нет. Но верните xmlNodePtr (cur_node) вызывающей сто

Сообщение Anonymous »

Я борюсь с моим XML-файлом.
Это результат вызова rest, и мне нужно только выбрать значения нескольких элементов (содержимое).
Кажется, все работает нормально, функция " findNodeName()" находит мой элемент и выбирает его содержимое.
Но я хочу вернуть текущий узел (cur_node) обратно вызывающему объекту для последующей обработки.
Я знаю, что я делаю что-то не так, но не могу понять этого.
Почему xmlNodePtr имеет значение NULL, когда возвращается к вызывающей функции?

Код: Выделить всё

xmlNodePtr findNodeName(xmlNodePtr a_node, char **findIt)
{
xmlNodePtr cur_node = a_node;   // a_node is the root node, picked upl earlier.
char *key = *findIt;        // Key is what I'm looking for
xmlChar *result = NULL;
xmlNode *tmpNode = NULL;

if (a_node == NULL) {
printf("Empty document\n");
return(NULL);
}

while (cur_node) {
//printf("cur_node->name = %s, type = %d\n", cur_node->name, cur_node->type);
if ((!xmlStrcmp(cur_node->name, (const xmlChar *) key ))) {

printf("Node is: %s\n", cur_node->name);  // Work fine
//tmpNode = xmlCopyNode(cur_node, 1);     // Test
//printf("tmpNode: %s\n", cur_node->name);    // Also works fine
result = xmlNodeGetContent(cur_node->children);
printf("Result: %s, ptr = %p\n", (char*)result, (void*)&result); // No problem here    either, got value (which is "true")
if (cur_node != NULL) {
return(cur_node);   // It's not NULL here
}
}

cur_node = cur_node->next;
}

for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
if ((cur_node->type == XML_ELEMENT_NODE)) {
findNodeName(cur_node->children, findIt);
}
}

return (NULL);
}

Calling function
int parseDocument(xmlstring *s)
{
xmlDoc *doc;
xmlChar *key;
xmlNodePtr current;
xmlNodePtr found;
xmlChar *value;

......
......

printf("Where are we: %s\n", current->name);

char *searchNode = "IndividinformationGrunduppgifter";  // The node I'm looking for

while (current != NULL) {
if (current->type == XML_ELEMENT_NODE) {
found = findNodeName(current, &searchNode);
if (found != NULL) {
// **Here is my problem, function findNodeName return's a NULL xmlNodePtr**
// Always NULL here,
key = getSekretessValue(found);
printf("Key: %s\n", key);
} else {
printf("found = NULL\n");
}
current = current->next;
}
}
Я пробовал использовать разные формы указателей и копировать узел с помощью xmlCopyNode. Все с тем же результатом, ну то же и то же? Я не понимаю своей ценности.

Подробнее здесь: https://stackoverflow.com/questions/784 ... t-but-retu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Я хочу изменить курсор в wpf на собственный файл .cur? [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Странная работа оператора cur.executescript с заполнителем
    Anonymous » » в форуме Python
    0 Ответы
    64 Просмотры
    Последнее сообщение Anonymous
  • Почему настройка связанного списка Node Node Node на Null также не влияет на узел, на который он указывал?
    Anonymous » » в форуме JAVA
    0 Ответы
    81 Просмотры
    Последнее сообщение Anonymous
  • Файл 'libxml2' не найден
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Я получаю Timeouterror: [Winerror 10060], когда я анализирую свой школьный сайт
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»