Anzeige:
Ergebnis 1 bis 1 von 1

Thema: QDom (XML)

  1. #1
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Bayern
    Beiträge
    70

    QDom (XML)

    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
    Code:
    #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
    Code:
    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:
    Code:
        QString all;
        all.append( "masterlevel/all.xml" );
       	QFile file( all );
       	//slotListView();
    	MLXmlParser( &file, lv_All);
    aufbau der XML datei
    Code:
    <?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.
    Geändert von ChMaster|LFreak (10-04-2005 um 00:45 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •