当前位置: 技术问答>linux和unix
关于使用libxml2的一个小问题
来源: 互联网 发布时间:2016-05-22
本文导语: xmlDocPtr doc; doc = xmlReadFile(lpFileName, "UTF-8", XML_PARSE_RECOVER); if (NULL == doc) { return false; } xmlNodePtr curNode = xmlDocGetRootElement(doc); //确定文档根元素 if (NULL == curNode) { xmlF...
xmlDocPtr doc;
doc = xmlReadFile(lpFileName, "UTF-8", XML_PARSE_RECOVER);
if (NULL == doc)
{
return false;
}
xmlNodePtr curNode = xmlDocGetRootElement(doc); //确定文档根元素
if (NULL == curNode)
{
xmlFreeDoc(doc);
return false;
}
if (xmlStrcmp(curNode->name, BAD_CAST "root") != 0)
{
xmlFreeDoc(doc);
return false;
}
xmlNodePtr nodeCities = curNode->xmlChildrenNode;
//如果取不到,或取到的不是cities,那么认为文档有问题
if (nodeCities == NULL || xmlStrcmp(nodeCities->name, BAD_CAST "cities") != 0)
{
xmlFreeDoc(doc);
return false;
}
if (nodeCities == NULL)
{
xmlFreeDoc(doc);
return false;
}
xmlNodePtr nodeCity = nodeCities->xmlChildrenNode;
m_vecName.clear();
m_vecURL.clear();
while(curNode != NULL)
{
//查找带有属性attribute的节点
if (xmlHasProp(nodeCity,BAD_CAST "name") && xmlHasProp(nodeCity,BAD_CAST "url"))
{
string strName;
string strURL;
xmlChar* szAttr = xmlGetProp(nodeCity,BAD_CAST "name");
strName = (char *)szAttr;
xmlFree(szAttr);
szAttr = xmlGetProp(nodeCity,BAD_CAST "url");
strURL = (char *)szAttr;
xmlFree(szAttr);
if (strName != "" && strURL != "")
{
m_vecName.push_back(strName);
m_vecURL.push_back(strURL);
}
}
nodeCity = nodeCity->next;
}
xmlFreeDoc(doc);
这个就是我读取XML文件的代码,当我的XML文件是以下格式时就能正确得到city这个子结点,也能得到属性
(没有空格, 没有回车,没有TAB)
22
当我的XML文件是以下格式时cities这个子结点都得不到,都到的是一个XML_TEXT_NODE类型
(用文本编辑器编辑的,有空格,有回车,有TAB的)
2
2
在linux和windows下都试过了,都是这种情况,是不是我读取文件时要设置一些东西呢,请高人指点!
|
XML文件你需要先进行解析吧?
解析完成后进行读取等操作。
解析完成后进行读取等操作。
doc = xmlParseFile(lpFileName);
if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. n");
return;
}