2015-11-18 2 views
0

я с XML-файл следующим образом:Изменить значение атрибута в XML C++

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ConfigData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <MyData> 
     <FrontCamera>2</FrontCamera> 
     <RearCamera>8</RearCamera> 
    </MyData> 
</ConfigData> 

Мне нужно изменить значение атрибута RearCamera от значения 8 до 16. Я использую C++ и с libxml2 библиотеку Я пробовал как внизу, он не работал должным образом. Неужели я ошибаюсь?

xmlDoc* doc = NULL; 
xmlNode* root_node = NULL; 
xmlNode *child_node = NULL; 
xmlNode *cur_node = NULL; 
xmlNode *cur = NULL; 

LIBXML_TEST_VERSION //!< Macro to check API for match with the DLL we are using 
doc = xmlParseFile("ConfigFile.xml"); //!<parse the file and get the DOM 

if (doc == NULL) 
{ 

}  
else 
{ 
    root_node = xmlDocGetRootElement(doc);  
    if(root_node != NULL) 
     { 
     child_node = root_node->children;     
     unsigned char* cValue;     
     int iHandedness = 0; 

     while(child_node!=NULL) 
      { 

       if(!xmlStrcmp(child_node->name,(const xmlChar *)"MyData")) 
       { 
        cur = child_node->children; 
        if(NULL!= cur) 
        { 
         for (cur_node = cur; cur_node; cur_node = cur_node->next) 
         { 
          if (cur_node->type == XML_ELEMENT_NODE) 
          { 
           if(!xmlStrcmp(cur_node->name,(const xmlChar *)"RearCamera"))  
           { 
            cur_node->children->content = (const xmlChar *)(16) ; 

           } 
          } 
         } 
        } 
      } 
      child_node = child_node->next; 
     } 
    } 
    xmlSaveFormatFile ("ConfigFile.xml", doc, 1);  
    xmlFreeDoc(doc);  //!< free document 
    xmlCleanupParser();  
}  

Сохранить не происходит, код сброс происходит обратный след:

n __vfprintf_chk() from /lib/libc.so.6 
#1 0xb5bb7028 in xmlGenericErrorDefaultFunc() from /usr/lib/libxml2.so.2 
#2 0xb5bb6e6b in xmlReportError() from /usr/lib/libxml2.so.2 
#3 0xb5bb839e in __xmlRaiseError() from /usr/lib/libxml2.so.2 
#4 0xb5bb8507 in __xmlSimpleError() from /usr/lib/libxml2.so.2 
#5 0xb5be3f81 in __xmlIOErr() from /usr/lib/libxml2.so.2 
#6 0xb5be43d7 in xmlIOErr() from /usr/lib/libxml2.so.2 
#7 0xb5be4841 in xmlFileOpenW() from /usr/lib/libxml2.so.2 
#8 0xb5be7369 in __xmlOutputBufferCreateFilename() from /usr/lib/libxml2.so.2 
#9 0xb5be7573 in xmlOutputBufferCreateFilename__internal_alias() from /usr/lib/libxml2.so.2 
#10 0xb5c97912 in xmlSaveFormatFileEnc__internal_alias() from /usr/lib/libxml2.so.2 
#11 0xb5c979f8 in xmlSaveFileEnc__internal_alias() from /usr/lib/libxml2.so.2 

ответ

0

Кажется, вы размещаете целое значение 16 в поле XML, который должен быть строка символов значения «16».

Глядя на libxml2, кажется, вы должны использовать функции библиотеки, чтобы изменить значение attriute.

См. libxml2 attribute modification C о том, как изменить значение атрибута.

+0

код заканчивается в файле savefile –

+0

Что вы имеете в виду под «кодом» и «завершаете»? См. Ссылку на изменение атрибута; любой другой способ не определен. –