#include
#include
#include
#include
#include
#include
#include
#include
#include
static void Useage(void)
{
printf("command is not right, please try agin\n");
printf("Useage: ./xml_prog_tool \n");
}
/* how to compile this xml resolver? useing command:
*arm-none-linux-gnueabi-gcc -o tool_xml tool_xml.c -lxml2 -I /usr/include/libxml2 -L -lz -lm
*/
static int xml_parse(char *szDocName)
{
xmlDocPtr doc; //定义解析文档指针
xmlNodePtr curNode; //定义结点指针(你需要它为了在各个结点间移动)xmlNodePtr
xmlChar *szKey; //临时字符串变量
xmlNodePtr propNodePtr;
doc = xmlReadFile(szDocName, "UTF-8", XML_PARSE_RECOVER); //以GB2312的编码方式读入解析文件
//检查解析文档是否成功,如果不成功,libxml将指一个注册的错误并停止。
//一个常见错误是不适当的编码。XML标准文档除了用UTF-8或UTF-16外还可用其它编码保存。
//如果文档是这样,libxml将自动地为你转换到UTF-8。更多关于XML编码信息包含在XML标准中.
if (NULL == doc)
{
fprintf(stderr,"xxx.xml is not parsed successfully. \n");
return -1;
}
curNode = xmlDocGetRootElement(doc); //确定文档根元素
/*检查确认当前文档中包含内容*/
if(NULL == curNode)
{
fprintf(stderr,"the document is empty.\n");
xmlFreeDoc(doc);
return -1;
}
/* 我们需要确认文档是正确的类型。“PROG”是在这个烧写中使用文档的根类型。*/
if (xmlStrcmp(curNode->name, BAD_CAST "PROG"))
{
fprintf(stderr,"document of the wrong type, root_node is not PROG\n");
xmlFreeDoc(doc);
return -1;
}
curNode = curNode->xmlChildrenNode; // curNode目前等于根目录的第一个子目录
propNodePtr = curNode; // 由于空格,现在这个节点是名为text的节点
while(curNode != NULL)
{
if(xmlStrcmp(curNode->name,(const xmlChar *)"text"))
{
//get_file_information(curNode);
//printf("%s\n", curNode->name);
//printf("get_file_information()\n");
}
curNode = curNode->next;
}
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
int main(int argc, char* argv[])
{
char *szDocName;
int ret,retval = 0;
int val, flag = 0;
int i;
if (argc <= 1)
{
Useage();
return -1;
}
/* 1. parse xml */
szDocName = argv[1];
ret = xml_parse(szDocName); // 解析xml文件,并把结果保存到全局结构体中
if(ret)
{
printf("parse xml file failed!!!\n");
return -1;
}
return retval;
}