2016-03-30 2 views
0

Это делается с использованием libxml2-2.7.8, я получаю ошибку. Я пытался с этим:LibXml2 с C/C++

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <libxml/xmlmemory.h> 
#include <libxml/parser.h> 

int main(int argc, char **argv) { 

    char   *docname; 
    xmlDocPtr doc; 
    xmlNodePtr cur; 
    xmlChar  *uri; 

    if (argc <= 1) { 
     printf("Usage: %s docname\n", argv[0]); 
     return(0); 
    } 

    docname = argv[1]; 

    doc = xmlParseFile(docname); 
    cur = xmlDocGetRootElement(doc); 

    cur = cur->xmlChildrenNode; 
    while (cur != NULL) { 
     if ((!xmlStrcmp(cur->name, (const xmlChar *)"reference"))) { 
      uri = xmlGetProp(cur, "uri"); 
      printf("uri: %s\n", uri); 
      xmlFree(uri); 
     } 
     cur = cur->next; 
    } 
    xmlFreeDoc(doc); 
    return (1); 
} 

и XML-файл:

<?xml version="1.0" encoding="utf-8"?> 
<story> 
    <storyinfo> 
    <author>John Fleck</author> 
    <datewritten>June 2, 2002</datewritten> 
    <keyword>تخیلی</keyword> 
    </storyinfo> 
    <body> 
    <headline>This is the headline</headline> 
    <para>This is the body text.</para> 
    </body> 
    <reference uri="www.w3.org/TR/xslt20/"/> 
</story> 

Я получаю сообщение об ошибке, как: ошибка C2664: 'XMLCHAR * xmlGetProp (xmlNodePtr, Const XMLCHAR *)': не может конвертировать аргумент 2 из 'сопзИте полукокс [4]' к 'сопзИте XMLCHAR *'

Пожалуйста, помогите

+1

Выберите только один язык программирования, а не два. –

ответ

1

Вы пропускаете бросок на константные XMLCHAR *:

uri = xmlGetProp(cur, (const xmlChar*)"uri"); 
+0

Привет, Я пробовал это, но теперь он дал несколько других ошибок относительно нерешенных внешних символов (например, неразрешенный внешний символ _xmlStrcmp, указанный в функции _main, [также для _xmlFreeDoc, _xmlDocGetRootElement, _xmlGetProp, _xmlParseFile и _imp_xmlFree] ) – Kru

+1

Вы связываетесь с libxml правильно во время компиляции? (например, -lxml2, если я правильно помню, вам также может потребоваться указать путь к библиотеке с опцией -L компилятора) –