Seite 1 von 1

Nutzung der DOM - Api

Verfasst: 14. Dezember 2007 14:12
von Qt_Starter
Hallo,

nachdem ich jetzt fast alles, was der Qt - Assistant zum Dom - Api dokumentiert, ausprobiert habe, schaffe ich es dennoch nicht meine Elemente richtig anzusprechen :(

folgendes Beispiel:

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<root>
    <book name="MissionToFix">
        <title name="buffer">heap</title>
        <title name="MSC">4</title>
    </book>
    <book name="FirstRoot">
        <title name="Magic">3</title>
        <title name="version">12</title>
    </book>
</root>

Wie kann man mit der DOM - Api auf eines der Bezeichnungen hinter "name" zugreifen? (Beispiel: name = "MissionToFix")

Freue mich über jeden Hinweis!

Verfasst: 14. Dezember 2007 14:16
von VuuRWerK
Hast Dir wirklich alles angeschaut? Wenn ja, dann nicht richtig. Zudem würdest Du vielleicht darauf kommen das es sich bei "name" in einem tag um ein Attribut handelt, das setzt aber auch vorraus das Du Dich mit XML auskennst! ;)

http://doc.trolltech.com/4.3/qdomattr.html

Gut Schuß
VuuRWerK ;)

@VuuRWerK

Verfasst: 14. Dezember 2007 14:29
von Qt_Starter
Ich habs mir eigentlich angeschaut und auch schon angeschaut, aber es funktioniert leider nicht.
Hast du ein Codebeispiel für diese XML - Datei?

Hier mein Code:

Code: Alles auswählen

.
.
.
QCoreApplication a(argc, argv);
QFile file("index.xml");
if (!file.open(QIODevice::ReadOnly))
	return 1;

QByteArray content = file.readAll();
QString StrContent = QString::QString(content);
QString errorMessage;
int line, col;

QDomDocument doc;

if(!doc.setContent(StrContent, false, &errorMessage, &line, &col))
{
	cout << "Error in Line " << line << ", Column " << col << ":" << qPrintable(errorMessage) << endl;
		return 1;
}	
file.close();

QDomElement DomElem;
DomElem = doc.documentElement();					

QDomNode FirstChildNode = DomElem.firstChild();
QString FirstNodeName;

FirstNodeName = FirstChildNode.nodeName();		//book

QDomAttr MyAttrFirst = FirstChildNode.toAttr();
QString testValue;
testValue = MyAttrFirst.name();         //leer
testValue = MyAttrFirst.value();         //leer
.
.
.

Verfasst: 14. Dezember 2007 14:39
von Volker

Code: Alles auswählen

QDomElement element = ...;
QString value = element.attribute("name");

@Volker

Verfasst: 14. Dezember 2007 15:11
von Qt_Starter
So klappt es leider auch nicht, das ist ja auch das Beispiel aus der Doku.
:(

Verfasst: 14. Dezember 2007 15:46
von Volker

Code: Alles auswählen

QCoreApplication a(argc, argv);
QFile file("index.xml");
if (!file.open(QIODevice::ReadOnly))
   return 1;

QString errorMessage;
int line, col;

QDomDocument doc;
if(!doc.setContent(&file, &errorMessage, &line, &col))
{
   cout << "Error in Line " << line << ", Column " << col << ":" << qPrintable(errorMessage) << endl;
      return 1;
}   
file.close();

QDomElement DomElem;
DomElem = doc.documentElement();               

QDomElement FirstChildNode = DomElem.firstChildElement();
QString FirstNodeName;

FirstNodeName = FirstChildNode.nodeName();      //book

QString name = FirstChildNode.attribute("name");
 
Versuch's mal so (ungetestet)

@Volker

Verfasst: 14. Dezember 2007 16:16
von Qt_Starter
Vielen Dank, jetzt klappt es :D