Nutzung der DOM - Api

Verschiedenes zu Qt
Antworten
Qt_Starter
Beiträge: 23
Registriert: 16. November 2007 21:04

Nutzung der DOM - Api

Beitrag 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!
VuuRWerK
Beiträge: 82
Registriert: 11. Juni 2007 20:46
Wohnort: Dresden

Beitrag 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 ;)
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel.
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
Qt_Starter
Beiträge: 23
Registriert: 16. November 2007 21:04

@VuuRWerK

Beitrag 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
.
.
.
Zuletzt geändert von Qt_Starter am 14. Dezember 2007 14:39, insgesamt 1-mal geändert.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Code: Alles auswählen

QDomElement element = ...;
QString value = element.attribute("name");
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Qt_Starter
Beiträge: 23
Registriert: 16. November 2007 21:04

@Volker

Beitrag von Qt_Starter »

So klappt es leider auch nicht, das ist ja auch das Beispiel aus der Doku.
:(
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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)
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Qt_Starter
Beiträge: 23
Registriert: 16. November 2007 21:04

@Volker

Beitrag von Qt_Starter »

Vielen Dank, jetzt klappt es :D
Antworten