2015-05-07 4 views
1

Я хочу изменить пространство имен узла в xml.Изменение пространства имен узла libxml2

doc = novi_xml_getdoc(doc_name); 
if(doc==NULL){ 
    return -1; 
} 

sprintf(buff, "//%s:capable-switch",ofprefix[ofconfig_version]); 
node = xmlXPathEvalExpression(xpath, context) 
if(node == NULL){ 
    return -1; 
} 
xmlNsPtr ns = xmlNewNs(node,"new-namespace", "prefix"); 
xmlSetNs(node, ns); 

xmlSaveFormatFile (doc_name, doc, 1); 
xmlFreeDoc(doc); 

Но это не меняет пространство имен узла. Пространство имен остается таким же. Я видел пару примеров, но все они связаны с изменением пространства имен childnode.

Кроме того, я думаю, что если мы сможем изменить узел другим способом, например, удалив и создав его, он будет работать. Но не знаю, как связать этот узел с его дочерними узлами.

ответ

1

node результат xmlXPathEvalExpression это непосредственно не xmlNodePtr вы ожидаете, что это xmlXPathObjectPtr.

http://www.xmlsoft.org/html/libxml-xpath.html#xmlXPathObject

Вам нужно сверлить, чтобы node->nodesetval->nodeTab[0] получить первый удар выражения. Также хорошо протестировать node->nodesetval для NULL, проверьте node->nodesetval->nodeNr на количество просмотров и т. Д.

Смежные вопросы