解析xml文件的郁闷问题
这是我的xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<sitech-version-manager>
<!-- -->
<system name="name1">
<watch-path>/score/verman</watch-path>
<watch-path>/home/b</watch-path>
<watch-path>/home/c</watch-path>
<watch-path>/home/d</watch-path>
<watch-path>/home/e</watch-path>
</system>
<system name="name2">
<watch-path>/home/a</watch-path>
<watch-path>/home/b</watch-path>
<watch-path>/home/c</watch-path>
<watch-path>/home/d</watch-path>
<watch-path>/home/e</watch-path>
</system>
<system name="name3">
<watch-path>/home/a</watch-path>
<watch-path>/home/b</watch-path>
<watch-path>/home/c</watch-path>
<watch-path>/home/d</watch-path>
<watch-path>/home/e</watch-path>
</system>
<dbcfg>
<url>aaaaaaaaaa</url>
<username>/home/c</username>
<password>/home/d</password>
<name>/home/e</name>
</dbcfg>
</sitech-version-manager>
这是我的解析程序
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#include "verman.h"
void parseDb(xmlDocPtr doc, xmlNodePtr cur) {
xmlChar *key;
cur = cur->xmlChildrenNode;
while (cur != NULL) {
printf("%s\n",cur->name);
if ((!xmlStrcmp(cur->name, (const xmlChar *)"url"))) {
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
sprintf(dbcfgPnt->url,key,sizeof(key));
printf("urlfffffff: %s\n", key);
xmlFree(key);
}else if((!xmlStrcmp(cur->name, (const xmlChar *)"username"))){
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
sprintf(dbcfgPnt->username,key,sizeof(key));
printf("url: %s\n", key);
xmlFree(key);
}else if((!xmlStrcmp(cur->name, (const xmlChar *)"password"))){
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
sprintf(dbcfgPnt->password,key,sizeof(key));
printf("url: %s\n", key);
xmlFree(key);
}else if((!xmlStrcmp(cur->name, (const xmlChar *)"name"))){
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
sprintf(dbcfgPnt->name,key,sizeof(key));
printf("url: %s\n", key);
xmlFree(key);
}else{
printf("数据库配置没有成功!\n");
exit(1);
}
cur = cur->next;
}
return;
}
void parseSys(xmlDocPtr doc, xmlNodePtr cur,char* sysname) {
xmlChar *key;
cur = cur->xmlChildrenNode;
char pathstr[1024];
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"watch-path"))) {
memset(pathstr,0x0,sizeof(pathstr));
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
/*pathstr=(char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);*/
sprintf(pathstr,"%s",key);
printf("path: %s\n", pathstr);
xmlFree(key);
opath("a",sysname,pathstr);
}
cur = cur->next;
}
return;
}
static void parseDoc(char *docname) {
xmlDocPtr doc;
xmlNodePtr cur;
doc = xmlParseFile(docname);
if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. \n");
return;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}
if (xmlStrcmp(cur->name, (const xmlChar *) "sitech-version-manager")) {
fprintf(stderr,"document of the wrong type, root node != story");
xmlFreeDoc(doc);
return;
}
cur = cur->xmlChildrenNode;
xmlChar *uri;
char sysname[1024];
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"system"))){
memset(sysname,0x0,sizeof(sysname));
uri = xmlGetProp(cur, "name");
sprintf(sysname,"%s",uri);
printf("name: %s\n", uri);
xmlFree(uri);
parseSys(doc, cur,sysname);
}else if((!xmlStrcmp(cur->name, (const xmlChar *)"dbcfg"))){
parseDb(doc, cur);
}
cur = cur->next;
}
xmlFreeDoc(doc);
return;
}
int main(int argc, char **argv) {
dbcfg dbcfg1;
dbcfgPnt=&dbcfg1;
memset(dbcfgPnt,0x0,sizeof(dbcfgPnt));
char *docname;
docname=getenv("VERMANPATH");
if(docname==NULL){
printf("请配置环境变量\"VERMANPATH\"!\n");
exit(1);
}
printf("配置文件路径:%s\n",docname);
parseDoc (docname);
free(docname);
}
问题: 关于dbcfg下面的所有东西都解析不出来