libxml2属性修改C.

Jos*_*siP 3 c libxml2

我想在我的xml中更改一个属性('voltage'):

...
    <detector voltage="1.2e3f"/>
...
Run Code Online (Sandbox Code Playgroud)

这是我试图这样做的方式:

 void save_detector_attr(xmlNode *node, xmlDoc *doc){
        char *voltage;
        xmlAttrPtr s_vnewattr;
        char buf[128];
        xmlNode *cur = node->xmlChildrenNode;
        float sv;
        int cnt = 0;
        while(cur != NULL) {
            if (cur->type == XML_ELEMENT_NODE) {
                if (!xmlStrcmp(cur->name, "detector")){
                    voltage = xmlGetProp(cur, "voltage");
                    sv = atof(voltage);

                    snprintf(buf, 128, "%f", sv + 20.1 );

                    s_vnewattr = xmlNewProp (cur, "voltage", buf);
                    printf(" SAVING to voltage value: %s\n", buf);

                }
            }
            cur = cur->next;
        }
        xmlSaveFormatFile ("./mc2x.xml", doc, 1);
Run Code Online (Sandbox Code Playgroud)

不幸的是,在调用该函数后,我没有重写属性,而是使用了这个新文件:

<detector voltage="1.2e3f" voltage="1220.100000"/>
Run Code Online (Sandbox Code Playgroud)

如何使该属性重写而不是创建一个新属性?

关于J.

nwe*_*hof 6

只需使用xmlSetProp:

xmlAttrPtr xmlSetProp (xmlNodePtr node, 
                       const xmlChar * name, 
                       const xmlChar * value)
Run Code Online (Sandbox Code Playgroud)

设置(或重置)节点承载的属性.如果@name有前缀,那么将使用相应的命名空间绑定(如果在范围内); 这是一个错误,它在范围内没有这样的ns绑定.