1.实现功能:读取一个xml文件中的内容,节点等信息!
首先定义了一个test.xml文件,文件内容如下:
i still have lots to work on]]>
like it
poor , just listen
candy]]>
写了三个文件:分别为:testxml.cpp ReadXml.cpp ReadXml.h
testxml.cpp内容如下:
#include "ReadXml.h"
#include
#include
#include
#include
using namespace std;
int main(int argc, char **argv)
{
//string filename = "parser.xml";
string filename = "usb.xml";
ReadXml rx;
const char* name = (char*)rx.getRootNodeName(filename);
cout << name << endl;
const char* content = (char*)rx.getAllContent(filename);
cout << content << endl;
xmlDocPtr doc;
xmlNodePtr cur;
xmlChar* szKey;
const char *docname = filename.c_str();
xmlKeepBlanksDefault(0);
doc = xmlParseFile(docname);
if(doc == NULL){
fprintf(stderr, "Document not parse successfully. \n");
return 0;
}
/* obtain root node */
cur = xmlDocGetRootElement(doc);
if(cur == NULL){
fprintf(stderr, "empty document\n");
xmlFreeDoc(doc);
return 0;
}
cur = cur->xmlChildrenNode;
//cout << "attributes is :" <
cout << "attributes is :" <
const char* nodecontent = (char*)rx.getNodeContent(cur);
cout << nodecontent << endl;
cur = cur->next;
const char* nodeattribute = (char*)rx.getNodeAttributes(cur, (const xmlChar*)"attributes");
if (NULL == nodeattribute) {
cout << "nodeattribute is null!" << endl;
} else {
cout << "nodeattribute is:" << nodeattribute << endl;
}
//cout << xmlGetProp(cur, (const xmlChar*)"name") << endl;
return 1;
}
ReadXml.cpp内容如下:
#include
#include "ReadXml.h"
using namespace std;
ReadXml::ReadXml()
{
}
ReadXml::~ReadXml()
{
}
const xmlChar* ReadXml::getRootNodeName(std::string filename)
{
const char *docname = filename.c_str();
xmlKeepBlanksDefault(0);
doc = xmlParseFile(docname);
if(doc == NULL){
fprintf(stderr, "Document not parse successfully. \n");
return 0;
}
/* obtain root node */
cur = xmlDocGetRootElement(doc);
if(cur == NULL){
fprintf(stderr, "empty document\n");
xmlFreeDoc(doc);
return 0;
}
return cur->name;
//printf("root node :%s\n", cur->name);
//szKey = xmlNodeGetContent(cur);
//printf("all content:\n %s \n", szKey);
}
xmlChar* ReadXml::getAllContent(std::string filename)
{
const char *docname = filename.c_str();
xmlKeepBlanksDefault(0);
doc = xmlParseFile(docname);
if(doc == NULL){
fprintf(stderr, "Document not parse successfully. \n");
return 0;
}
/* obtain root node */
cur = xmlDocGetRootElement(doc);
if(cur == NULL){
fprintf(stderr, "empty document\n");
xmlFreeDoc(doc);
return 0;
}
szKey = xmlNodeGetContent(cur);
return szKey;
}
xmlChar* ReadXml::getNodeContent(xmlNodePtr node)
{
return xmlNodeGetContent(node);
}
xmlChar* ReadXml::getNodeAttributes(xmlNodePtr node, const xmlChar * name)
{
return xmlGetProp(node, name);
//rerutn value should free use xmlFree(szAttr);
}
ReadXml.h内容如下:
#include
#include
#include
#include
#include
class ReadXml
{
public:
ReadXml();
~ReadXml();
const xmlChar* getRootNodeName(std::string filename);
xmlChar* getAllContent(std::string filename);
xmlChar* getNodeContent(xmlNodePtr cur);
xmlChar* getNodeAttributes(xmlNodePtr node, const xmlChar * name);
private:
xmlDocPtr doc;
xmlNodePtr cur;
xmlChar* szKey;
};
编译代码为:
g++ -o testxml.out testxml.cpp ReadXml.cpp -I/usr/include/libxml2/ -lxml2
./testxml.out
执行结果为:
lsp@liushuanpeng:~/gccConfig$ ./testxml.out
story
i still have lots to work onlike itpoor , just listencandy
attributes is :lsp
i still have lots to work onlike itpoor , just listencandy
nodeattribute is null!
解析稍后在写!