TinyXml Problem



  • Hi,
    ich bin gerade dabei TinyXml in mein Projekt zu integrieren, habe aber nun folgendes Problem:
    XML-Datei:

    <?xml version="1.0" standalone=no>
    
    <style>
    <text>Test</text>
    </style>
    

    Code:

    TiXmlDocument *pStyle = new TiXmlDocument(pcPath);
    if(!pStyle->LoadFile(pcPath))
    {
    	return FALSE;
    }
    
    TiXmlNode *pNode = NULL;
    TiXmlElement *pElement = NULL;
    
    pNode = pStyle->FirstChildElement("style");
    pElement = pNode->ToElement();
    
    while(pElement)
    {
    	MessageBox(0, pElement->Value(), 0, 0);
    
    	pNode = pElement->NextSibling();
    	pElement = pNode->ToElement();
    }
    
    delete pStyle;
    pStyle = NULL;
    

    Es geht jetzt nicht ums Code-Design ;).

    Eigentlich sollten so die Unterelemente von 'style' aufgelistet werden, doch ich bekomme nur 'style' als Ausgabe. Wie komme ich nun zu dem 'text'-Tag?
    Und wie komme ich zu dem von den 'text'-Tags eingeschlossenem 'Test'

    Danke im Voraus

    M.T.



  • Lass pElement raus und ersetz die while-Schleife durch das hier:

    for(pNode = pNode->FirstChild(); pNode; pNode = pNode->NextSiblingElement())
    	{		
    		if(node)
    		{
    			std::cout << pNode->Value() << std::endl;
    		}
    		else
    		{
    			std::cout << "Knoten \"text\" nicht gefunden." << std::endl;
    		}
    	}
    

    Mit deinem

    pNode = pStyle->FirstChildElement("style");
    

    bekommst du ja einen Zeiger auf den Tag der den <text> Tag umgibt. Du musst also die Kinder dieses Tags duchgehen. Mit

    pNode = pNode->FirstChild()
    

    holst du dir das erste Kind.
    Mit

    pNode = pNode->NextSiblingElement()
    

    holst du dir immer einen Zeiger auf das jeweils nächste Kind oder NULL.(Bei dir wäre schon beim zweiten Mal Schluss)
    Und zwar solange bis pNode NULL ist.



  • Danke, so funktioniert's 🙂

    M.T.


Anmelden zum Antworten