Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. XmlListModel read an xml file qml
Forum Updated to NodeBB v4.3 + New Features

XmlListModel read an xml file qml

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
11 Posts 2 Posters 5.8k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    Titi01
    wrote on last edited by
    #1

    Hello,

    I am a beginner in Qml / QtQuick.

    I have an XML file (which I put the beginning hereafter) but I can not read it in my program qml ...
    I do not know what to put in source: neither in query: and in each XmlRole {}, I do not know what to put in query: ...

    Thank you for your help

    Top of the xml file:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- - phpMyAdmin XML Dump - version 4.0.10deb1 - http://www.phpmyadmin.net - - Host: localhost - Generation Time: May 12, 2014 at 10:14 PM - Server version: 5.5.37-0ubuntu0.14.04.1 - PHP Version: 5.5.9-1ubuntu4 -->
    <pma_xml_export xmlns:pma="http://www.phpmyadmin.net/some_doc_url/" version="1.0">
    <!-- - Structure schemas -->
    pma:structure_schemas
    <pma:database charset="latin1" collation="latin1_swedish_ci" name="kemi_fr">
    <pma:table name="atome"> CREATE TABLE atome ( id int(10) unsigned NOT NULL AUTO_INCREMENT, nom varchar(13) DEFAULT NULL, slug varchar(13) DEFAULT NULL, electron varchar(255) NOT NULL, numero int(10) unsigned DEFAULT NULL, symbole varchar(6) NOT NULL, info_groupe varchar(10) NOT NULL, info_periode varchar(10) NOT NULL, info_bloc varchar(10) NOT NULL, masse_volumique varchar(255) NOT NULL, cas varchar(255) NOT NULL, einecs varchar(255) NOT NULL, masse_atomique varchar(255) NOT NULL, rayon_atomique varchar(255) NOT NULL, rayon_de_covalence varchar(255) NOT NULL, rayon_de_van_der_waals varchar(255) NOT NULL, configuration_electronique varchar(255) NOT NULL, etat_oxydation varchar(255) NOT NULL, decouverte_annee varchar(255) NOT NULL, decouverte_noms varchar(255) NOT NULL, decouverte_pays varchar(255) NOT NULL, electronegativite varchar(255) NOT NULL, point_de_fusion varchar(255) NOT NULL, point_d_ebullition varchar(255) NOT NULL, is_radioactif tinyint(10) unsigned NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8; </pma:table>
    </pma:database>
    </pma:structure_schemas>
    <!-- - Database: 'kemi_fr' -->
    <database name="kemi_fr">
    <!-- Table atome -->
    <table name="atome">
    <column name="id">1</column>
    <column name="nom">Hydrogène</column>
    <column name="slug">hydrogene</column>
    <column name="electron">1</column>
    <column name="numero">1</column>
    <column name="symbole">H</column>
    <column name="info_groupe">1</column>
    <column name="info_periode">1</column>
    <column name="info_bloc">s</column>
    <column name="masse_volumique">0,08988 g·l-1, 0,0708 g·ml-1 (liquide, -253 °C), 0,0706 g·ml-1 (solide, -262 °C)</column>
    <column name="cas">12385-13-6</column>
    <column name="einecs"/>
    <column name="masse_atomique">1,00794</column>
    <column name="rayon_atomique">25 pm</column>
    <column name="rayon_de_covalence">0,31 ± 0,05 Å</column>
    <column name="rayon_de_van_der_waals">120 pm</column>
    <column name="configuration_electronique">1s1</column>
    <column name="etat_oxydation">-1, +1</column>
    <column name="decouverte_annee">1766</column>
    <column name="decouverte_noms">Henry Cavendish</column>
    <column name="decouverte_pays">Grande-Bretagne</column>
    <column name="electronegativite">2,2</column>
    <column name="point_de_fusion"/>
    <column name="point_d_ebullition"/>
    <column name="is_radioactif">0</column>
    </table>

    1 Reply Last reply
    0
    • ? Offline
      ? Offline
      A Former User
      wrote on last edited by
      #2

      Hi! I get a parse error for your XML file, but with the following data things work like this:

      <?xml version="1.0" encoding="UTF-8"?>
      <table name="atome">
          <column name="id">1</column>
          <column name="nom">Hydrogène</column>
          <column name="slug">hydrogene</column>
          <column name="electron">1</column>
          <column name="numero">1</column>
          <column name="symbole">H</column>
          <column name="info_groupe">1</column>
          <column name="info_periode">1</column>
          <column name="info_bloc">s</column>
      </table>
      
      import QtQuick 2.7
      import QtQuick.Controls 2.0
      import QtQuick.Layouts 1.0
      import QtQuick.XmlListModel 2.0
      
      ApplicationWindow {
          visible: true
          width: 640
          height: 480
      
          XmlListModel {
              id: model
              source: "qrc:/data.xml"
              query: "/table/column"
              XmlRole { name: "columnName"; query: "string(@name)" }
              XmlRole { name: "columnValue"; query: "string()" }
          }
      
          ListView {
              anchors.fill: parent
              model: model
              delegate:  Text { text: columnName + " = " + columnValue }
          }
      
      }
      
      1 Reply Last reply
      1
      • T Offline
        T Offline
        Titi01
        wrote on last edited by
        #3

        Thank you very much I will try this. I just have an older version of qt that does not include the qtquick 2.7 module nor the qtquick.controls 2.0

        1 Reply Last reply
        0
        • T Offline
          T Offline
          Titi01
          wrote on last edited by
          #4

          I have a problem @Wieland
          The "qmlscene" displays absolutely nothing with the code you gave me

          1 Reply Last reply
          0
          • ? Offline
            ? Offline
            A Former User
            wrote on last edited by
            #5

            Check the status, xml, and errorString properties (see XmlListModel ) to make sure the model has been loaded.

            1 Reply Last reply
            0
            • T Offline
              T Offline
              Titi01
              wrote on last edited by Titi01
              #6

              Sorry @Wieland but can you give me an example of status xml and errorString () because I do not see how to use them ...
              I'm really a beginner

              1 Reply Last reply
              0
              • ? Offline
                ? Offline
                A Former User
                wrote on last edited by
                #7

                Here is a complete example: https://drive.google.com/open?id=0B2D1UtsPfTx-b080YjdtRkE4b3c
                You didn't say what Qt version you're using; the example works with 5.8, see if you can make the necessary changes.

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  Titi01
                  wrote on last edited by
                  #8
                  This post is deleted!
                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    Titi01
                    wrote on last edited by Titi01
                    #9

                    Ok thanks @Wieland but now if my xml file is like this:

                    <?xml version="1.0" encoding="utf-8"?>
                    
                            <table name="atome">
                                <column name="id">1</column>
                                <column name="nom">Hydrogène</column>
                                <column name="slug">hydrogene</column>
                                <column name="electron">1</column>
                                <column name="numero">1</column>
                                <column name="symbole">H</column>
                                <column name="info_groupe">1</column>
                                <column name="info_periode">1</column>
                                <column name="info_bloc">s</column>
                                <column name="masse_volumique">0,08988 g·l-1,0,0708 g·ml-1 (liquide, -253°C),0,0706g·ml-1 (solide, -262 °C)</column>
                                <column name="cas">12385-13-6</column>
                                <column name="einecs"></column>
                                <column name="masse_atomique">1,00794</column>
                                <column name="rayon_atomique">25 pm</column>
                                <column name="rayon_de_covalence">0,31 ± 0,05 Å</column>
                                <column name="rayon_de_van_der_waals">120 pm</column>
                                <column name="configuration_electronique">1s1</column>
                                <column name="etat_oxydation">-1, +1</column>
                                <column name="decouverte_annee">1766</column>
                                <column name="decouverte_noms">Henry Cavendish</column>
                                <column name="decouverte_pays">Grande-Bretagne</column>
                                <column name="electronegativite">2,2</column>
                                <column name="point_de_fusion"></column>
                                <column name="point_d_ebullition"></column>
                                <column name="is_radioactif">0</column>
                            </table>
                            <table name="atome">
                                <column name="id">2</column>
                                <column name="nom">Hélium</column>
                                <column name="slug">helium</column>
                                <column name="electron">2</column>
                                <column name="numero">2</column>
                                <column name="symbole">He</column>
                                <column name="info_groupe">18</column>
                                <column name="info_periode">1</column>
                                <column name="info_bloc">s</column>
                                <column name="masse_volumique">0,1785 g·l-1 (0 °C, 1 atm);0,125 g·ml-1 (liquide, -268,93 °C)</column>
                                <column name="cas">12385-13-6</column>
                                <column name="einecs">231-168-5</column>
                                <column name="masse_atomique">4,002602</column>
                                <column name="rayon_atomique">128 pm (31 pm)</column>
                                <column name="rayon_de_covalence">28 pm</column>
                                <column name="rayon_de_van_der_waals">140 pm</column>
                                <column name="configuration_electronique">1s2</column>
                                <column name="etat_oxydation">0</column>
                                <column name="decouverte_annee">1895</column>
                                <column name="decouverte_noms">Jules Janssen, Joseph Norman Lockyer</column>
                                <column name="decouverte_pays">Grande-Bretagne</column>
                                <column name="electronegativite"></column>
                                <column name="point_de_fusion"></column>
                                <column name="point_d_ebullition">-268,93 °C</column>
                                <column name="is_radioactif">0</column>
                            </table>
                            <table name="atome">
                                <column name="id">3</column>
                                <column name="nom">Lithium</column>
                                <column name="slug">lithium</column>
                                <column name="electron">2|1</column>
                                <column name="numero">3</column>
                                <column name="symbole">Li</column>
                                <column name="info_groupe">1</column>
                                <column name="info_periode">2</column>
                                <column name="info_bloc">s</column>
                                <column name="masse_volumique">0,534 g·cm-3 (20 °C)</column>
                                <column name="cas">7439-93-2</column>
                                <column name="einecs">231-102-5</column>
                                <column name="masse_atomique">6,941</column>
                                <column name="rayon_atomique">145 pm (167 pm)</column>
                                <column name="rayon_de_covalence">1,28 ± 0,07 Å</column>
                                <column name="rayon_de_van_der_waals">182 pm</column>
                                <column name="configuration_electronique">[He] 2s1</column>
                                <column name="etat_oxydation">+1</column>
                                <column name="decouverte_annee">1817</column>
                                <column name="decouverte_noms">Johan August Arfwedson</column>
                                <column name="decouverte_pays">Suède</column>
                                <column name="electronegativite">0,98</column>
                                <column name="point_de_fusion">180,5 °C</column>
                                <column name="point_d_ebullition">1 342 °C</column>
                                <column name="is_radioactif">0</column>
                            </table>
                    

                    So I have several table "atome" ... How should I do to display just some columns? For example I just want to display " electron of lithium (id: 3)" ...

                    thanks you
                    Ps: I have the versions 5.6 -> 5.9

                    1 Reply Last reply
                    0
                    • ? Offline
                      ? Offline
                      A Former User
                      wrote on last edited by
                      #10

                      First thing is, your XML file is invalid, you need a top-level element, lets call it "root":

                      <?xml version="1.0" encoding="utf-8"?>
                      <root>
                         <table>...</table>
                         <table>...</table>
                         <table>...</table>
                      </root>
                      

                      For example I just want to display " electron of lithium (id: 3)"

                       XmlListModel {
                              ...
                              query: "/root/table/column[@name='id' and text()=3]/parent::table/column[@name='electron']"
                              ...
                          }
                      

                      w3schools has two tutorials that might be worth reading: XML Tutorial, XPath Tutorial.

                      1 Reply Last reply
                      2
                      • T Offline
                        T Offline
                        Titi01
                        wrote on last edited by
                        #11

                        Okay I will look at all this
                        thank you for everything @Wieland

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved