更新:仍然不起作用:(我已经更新了代码部分,以反射(reflect)我当前拥有的内容。

对于使用TinyXML的人来说,这应该是一个非常简单的问题。我正在尝试使用TinyXML来解析XML文档并提取一些值。我昨天想出了如何在库中添加文件,并且已经成功加载了文档(嘿,这是一个开始)。

我一直在阅读手册,但还不太清楚如何挑选出各个属性。在Googling之后,我还没有找到具体示例的示例,因此也许这里使用TinyXML的人可以提供帮助。下面是XML的一部分,也是我开始解析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);
    }
}

我想提取每个卡的“类型”并将其保存到字符串中以放入组合框。如何访问此属性成员?

最佳答案

经过大量的代码研究,这是解决方案! (在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;
}

关于c++ - 使用TinyXML解析XML元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6521404/

10-10 14:46