解析xml文件的郁闷问题

epeoer 2006-09-11 05:08:15
这是我的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下面的所有东西都解析不出来
...全文
332 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_77 2006-10-11
  • 打赏
  • 举报
回复
libxml没用过,
一直只用过Apache的xerces-c
xiao_potato 2006-10-11
  • 打赏
  • 举报
回复
UP
wsxiangren 2006-10-11
  • 打赏
  • 举报
回复
mark
tailzhou 2006-09-13
  • 打赏
  • 举报
回复
不过不应该是sprintf的问题。
memset(dbcfgPnt,0x0,sizeof(dbcfgPnt)); //这里初试化也有点问题;
memset(dbcfgPnt,0x0,sizeof(dbcfg));
你的dbcfg 的定义??

你的printf打印出来的信息?parseSys是否能正常读取?
jixingzhong 2006-09-12
  • 打赏
  • 举报
回复
看你其他散 sprintf 不都是正确的么...

楼主改过来上面的错误吧
tailzhou 2006-09-12
  • 打赏
  • 举报
回复
sprintf(dbcfgPnt->url,key,sizeof(key));
格式错误!!

sprintf(dbcfgPnt->url,"%s",key);

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧