更新:仍然无法正常工作:(我已更新代码部分以反映我目前拥有的内容.
对于使用过TinyXML的人来说,这应该是一个非常简单的问题.我正在尝试使用TinyXML来解析XML文档并提取一些值.我想出了昨天如何在库中添加,我已经成功加载了文档(嘿,这是一个开始).
我一直在阅读手册,我无法弄清楚如何提取个人属性.谷歌搜索后,我还没有找到我的具体例子的例子,所以也许这里使用过TinyXML的人可以提供帮助.下面是XML的一部分,我已经开始解析它了.
XML:
<EGCs xmlns="http://tempuri.org/XMLSchema.xsd"> <card type="EGC1"> <offsets> [ ... ] </offsets> </card> <card type="EGC2"> <offsets> [ ... ] </offsets> </card> </EGCs>
加载/解析代码:
TiXmlDocument doc("EGC_Cards.xml"); if(doc.LoadFile()) { TiXmlHandle hDoc(&doc); TiXmlElement* pElem; TiXmlHandle hRoot(0); pElem = hDoc.FirstChildElement().Element(); if (!pElem) return false; hRoot = TiXmlHandle(pElem); //const char *attribval = hRoot.FirstChild("card").ToElement()->Attribute("card"); pElem = hDoc.FirstChild("EGCs").Child("card",1).ToElement(); if(pElem) { const char* tmp = pElem->GetText(); CComboBox *combo = (CComboBox*)GetDlgItem(IDC_EGC_CARD_TYPE); combo->AddString(tmp); } }
我想拉出每张卡片“type”并将其保存为字符串以放入组合框中.如何访问此属性成员?
解决方法
经过大量的代码游戏,这是解决方案! (在
HERE的帮助下)
TiXmlDocument doc("EGC_Cards.xml"); combo = (CComboBox*)GetDlgItem(IDC_EGC_CARD_TYPE); if(doc.LoadFile()) { TiXmlHandle hDoc(&doc); TiXmlElement *pRoot,*pParm; pRoot = doc.FirstChildElement("EGCs"); if(pRoot) { pParm = pRoot->FirstChildElement("card"); int i = 0; // for sorting the entries while(pParm) { combo->InsertString(i,pParm->Attribute("type")); pParm = pParm->NextSiblingElement("card"); i++; } } } else { AfxMessageBox("Could not load XML File."); return false; }