PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QDom (XML)



ChMaster|LFreak
09-04-2005, 20:05
glöscht und gelöst:

danke für eure mühen, habe da was anderes und hier das, was funktioniert:
(QListView benutzt, ist einfacher) ;)

CPP


#include "../header/ml_xmlparser.h"

#include <qdom.h>
#include <qlistview.h>
#include <qiodevice.h>

MLXmlParser::MLXmlParser( QIODevice *device, QListView *view )
{
listView = view;

QString errorStr;
int errorLine;
int errorColumn;

QDomDocument doc;
if( !doc.setContent( device, true, &errorStr, &errorLine, &errorColumn ) ){
qWarning("Zeile: %d, Spalte %d:", errorLine, errorColumn, errorStr.ascii() );
}

QDomElement root = doc.documentElement();
if( root.tagName() != "masterlevel_klassen" ){
qWarning( "Dies ist nicht die richtige XML datei" );
}

QDomNode node = root.firstChild();
while( !node.isNull() ){
if( node.toElement().tagName() == "group" )
parseEntry( node.toElement(), 0 );
node = node.nextSibling();
}
}

void MLXmlParser::parseEntry( const QDomElement &element, QListViewItem *parent )
{
QListViewItem *item;
if( parent ){
item = new QListViewItem( parent );
} else {
item = new QListViewItem( listView );
}
item->setOpen( true );
item->setText( 0, element.attribute( "name" ) );

QDomNode node = element.firstChild();
while( !node.isNull() ){
if( node.toElement().tagName() == "group" ){
parseEntry( node.toElement(), item );
} else if( node.toElement().tagName() == "page" ){
QDomNode childNode = node.firstChild();
while( !childNode.isNull() ){
if( childNode.nodeType() == QDomNode::TextNode ){
QString page = childNode.toText().data();
QString allPage = item->text(1);
if( !allPage.isEmpty() )
allPage += ", ";
allPage += page;
item->setText( 1, allPage );
break;
}
childNode = childNode.nextSibling();
}
}
node = node.nextSibling();
}
}


HEADER


class QIODevice;
class QDomElement;
class QListView;
class QListViewItem;

class MLXmlParser
{
public:
MLXmlParser( QIODevice *device, QListView *view );

private:
void parseEntry( const QDomElement &element, QListViewItem *parent );

QListView *listView;
};


aufruf:


QString all;
all.append( "masterlevel/all.xml" );
QFile file( all );
//slotListView();
MLXmlParser( &file, lv_All);


aufbau der XML datei :)


<?xml version="1.0"?>
<masterlevel_klassen>
<group name="Albion">
<group name="Waffenmeister">
<group name="Kampfmeister">
<page></page>
</group>
<group name="Kriegsherr">
<page></page>
</group>
</group>
...........


habe das bsp in einem Qt Buch gefunden und etwas umgemodelt ;)
somit funktioniert es.