c++ tinyxml查找utf8 xml元素并读取
最近,是用xml比较多。但是网上的这方面的资料特别少。我就自己弄了个。。使用的是tinyxml类,他具体怎么用可以看我另一篇博文。
c++ 使用TinyXml读写Xml
这里有简单的实例包括编译,下面的程序,只是一个简单的查询过程,具体的还需要大家在用的时候去完成。我也是尝试成功后就发布了。可能并不满足大家的需要,大家拿去用,可能还要改改。。。。
我读取的xml是
[html]
<?xml version="1.0" encoding="UTF-8"?>
<list>
<dict id="1" key="english" >
<key>english</key>
<acceptation>英语;英语语言;英格兰人;(英国)纯正英语;
</acceptation>
<pos>adj.</pos>
<acceptation>英格兰的;英国的;英语的;用英语写的;
</acceptation>
</dict>
<dict id="2" key="one" >
<key>one</key>
<acceptation>(数字)一;一个;(基数)一,第一;
</acceptation>
<pos>n.</pos>
<acceptation>一个人;一点钟;一体;独一;
</acceptation>
</dict>
<dict id="3" key="key" >
<key>key</key>
<pos>vt.</pos>
<acceptation>键入;锁上;调节…的音调;提供线索;</acceptation>
</dict>
</list>
调用入口:
[html]
char *file = "egxml.xml";
TiXmlDocument xmlDoc(file);
xmlDoc.LoadFile();
TiXmlElement* pRootElement = xmlDoc.RootElement(); //获取跟节点
TiXmlElement* pElesele = selectXml(pRootElement,"2","id"); //查找节点
string msg = "";
msg += dumpNode(pElesele,0); //读取该节点所有数据
查找节点函数
[cpp] www.zzzyk.com
TiXmlElement* CegDlg::selectXml(TiXmlElement *pRootElement,string strVal,string strName) //跟目录节点,查询属性值,查询属性
{
TiXmlElement* pEle = NULL;
string msg = "";
TiXmlElement* reEle = NULL; //用于返回
for (pEle = pRootElement->FirstChildElement(); pEle; pEle = pEle->NextSiblingElement()) //循环下面所有节点
{
// recursive find sub node return node pointer
int t = pEle->Type();
TiXmlElement * pElement = pEle->ToElement(); //转换至节点
TiXmlAttribute * pAttr = pElement->FirstAttribute(); //获取第一个属性
TiXmlAttribute * pNextAttr =NULL;
if(pAttr != NULL)
{
string tmpAttrVal = "";
string tmpAttrName = "";
do
{
tmpAttrVal = pAttr->Value(); //属性值
tmpAttrName = pAttr->Name(); //属性name
if(tmpAttrVal == strVal && tmpAttrName == strName)
{
return reEle = pElement; //找到就返回当前节点
break;
}
}while(pAttr = pAttr->Next()); //转移到下一个属性
}
}
return reEle;
}
读取所有数据
[html]
string CegDlg::dumpNode(TiXmlNode * pNode,int flag)
{
string msg = "";
if(pNode == NULL)
{
return "";
}
TiXmlText * pText = NULL;
TiXmlNode * pChildNode = NULL;
int t = pNode->Type();
if(t == TiXmlText::TINYXML_TEXT) //节点类型是text节点
{
pText = pNode->ToText();
string text = pText->Value();
if(!text.empty())
{
msg = msg + "="+ text;
}
}
else if(t == TiXmlText::TINYXML_ELEMENT) //节点类型是Element
{
msg = msg + "rn";
int num = flag;
while(num >= 1)
{
msg = msg + "t";
num--;
}
<
补充:软件开发 , C++ ,