6

更新:まだ機能していません:(現在持っているものを反映するようにコード部分を更新しました。

これは、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);
    }
}

各カードの「タイプ」を引き出して文字列に保存し、コンボボックスに入れたいと思います。この属性メンバーにアクセスするにはどうすればよいですか?

4

3 に答える 3

10

コードを何度も試した後、ここに解決策があります!(ここの助けを借り

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;
}
于 2011-06-29T16:51:09.803 に答える
2

パラメータとして名前を取り、属性を与えるAttributeメソッドが必要です。http ://www.grinninglizard.com/tinyxmldocs/classTiXmlElement.htmlを参照してください。

ドキュメントから、コードは次のようになります。

    hRoot.FirstChildElement("card").ToElement()->Attibute("type");

ただし、あなたがしているタイプのことについては、可能であればXPATHを使用します。私はそれを使ったことがありませんが、リンクが次のルートに行くことを選択した場合、TinyXPathプロジェクトが役立つかもしれません:http://tinyxpath.sourceforge.net/

お役に立てれば。

私があなたを助けるために使用しているドキュメントは次の場所にあります:http ://www.grinninglizard.com/tinyxmldocs/hierarchy.html

于 2011-06-29T13:42:36.323 に答える
1

必要なのはtype、要素から属性を取得することですcard。したがって、コードでは次のようになります。

const char * attribval = hRoot.FirstChild("card").ToElement()->Attribute("card");
于 2011-06-29T13:36:39.130 に答える