Chinaunix

标题: 关于libxml生成节点的问题 [打印本页]

作者: lyl2002    时间: 2009-07-16 20:46
标题: 关于libxml生成节点的问题
我有一个字符串/Document/MsgId/IdSet/Id1,
我想创建Id1,但不知道前面节点是否都生成,我要做到没有父节点就创建。
不知大家是否遇到过这样的问题,请高手指教一二,在此谢过。

[ 本帖最后由 lyl2002 于 2009-7-16 21:03 编辑 ]
作者: blackuhlan    时间: 2009-07-16 22:20
我的办法是一层一层往下找,找到就指到子节点,否则创建,不知道你愿不愿意用
作者: lyl2002    时间: 2009-07-17 08:45
自己写了一个,大致就这么个意思,大家可以参考一下
,一些底层函数自己写的,请赐教
int setnode(char *rhFldPath,char *rhFldName,char *acValue)
{
        char * nodeSet[50];/*最大50层*/
    char   tempPath[512];
    char   nodePath[512];
    char   xpath[512];
    xmlNodePtr cur,curNode;
    int    len=0,i;   

        memset(nodePath,0,sizeof(nodePath));
       
        sprintf(nodePath,"%s/%s",rhFldPath,rhFldName);
    len = split('/', nodePath, nodeSet, 50);
    cur = root;
    strcpy(xpath,"/Document");
    for( i=0; i<len; i++ )
    {              
        memset(xpath,0,sizeof(xpath));
        memset(tempPath,0,sizeof(tempPath));
        strcpy(tempPath,nodeSet);
        sprintf(xpath,"%s/%s",xpath,tempPath);
                if ( NULL == (curNode = XMLGetNode(doc, xpath)) )
                {
                        curNode= xmlNewChild(cur, NULL, tempPath, NULL);
                        if(NULL == curNode)
                        {
                                printf(-1, " 生成节点错!xpath=[%s]",xpath);
                        }
                        if ( i == len -1 )
                        {
                                XMLSetNodeText(curNode,acValue)        ;
                        }
                        cur = curNode;
                }
                else
                {
                        if ( i == len -1 )
                        {
                                XMLSetNodeText(curNode,acValue)        ;
                        }
                }       
        }
        return 0;
}

[ 本帖最后由 lyl2002 于 2009-7-17 08:47 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2