Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. xml write with only space or empty issue
Forum Updated to NodeBB v4.3 + New Features

xml write with only space or empty issue

Scheduled Pinned Locked Moved Unsolved General and Desktop
qxmlqdomxml parsingqt4.8.4xml
7 Posts 4 Posters 4.0k Views 2 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.
  • N Offline
    N Offline
    Narthan
    wrote on 22 Apr 2016, 03:26 last edited by
    #1

    Hello all,

    i am trying write xml file using Qdom
    sample of xml file will be lke this
    <?xml version='1.0'?>
    <xml>
    <Config>
    <test>
    <tag1>edit1</tag1>
    <tag2>5996</tag2>
    </test>
    </Config>
    </xml>

    code sample:

            QByteArray xmlData(file->readAll());
            QDomDocument doc("config");
            doc.setContent(xmlData);
            QDomElement root = doc.firstChildElement("xml");
            QDomElement parent = root.firstChildElement("Config");
            QDomElement parent1 = parent.firstChildElement("test");
            QDomElement hostname = parent1.firstChildElement("tag1");
            hostname.firstChild().setNodeValue(ui->tag1_lineEdit->text());
            QDomElement username = parent1.firstChildElement("tag2");
            username.firstChild().setNodeValue(ui->tag2_lineEdit->text());
    

    if tag1_lineEdit contains only space (" ") or empty ("") then xml file will be look
    <?xml version='1.0'?>
    <xml>
    <Config>
    <test>
    <tag1/>
    <tag2>5996</tag2>
    </test>
    </Config>
    </xml>
    again i am not able write anything in that tag from lineedit, can someone give me solution, how to write space or empty text,

    R 1 Reply Last reply 22 Apr 2016, 04:13
    0
    • N Narthan
      22 Apr 2016, 03:26

      Hello all,

      i am trying write xml file using Qdom
      sample of xml file will be lke this
      <?xml version='1.0'?>
      <xml>
      <Config>
      <test>
      <tag1>edit1</tag1>
      <tag2>5996</tag2>
      </test>
      </Config>
      </xml>

      code sample:

              QByteArray xmlData(file->readAll());
              QDomDocument doc("config");
              doc.setContent(xmlData);
              QDomElement root = doc.firstChildElement("xml");
              QDomElement parent = root.firstChildElement("Config");
              QDomElement parent1 = parent.firstChildElement("test");
              QDomElement hostname = parent1.firstChildElement("tag1");
              hostname.firstChild().setNodeValue(ui->tag1_lineEdit->text());
              QDomElement username = parent1.firstChildElement("tag2");
              username.firstChild().setNodeValue(ui->tag2_lineEdit->text());
      

      if tag1_lineEdit contains only space (" ") or empty ("") then xml file will be look
      <?xml version='1.0'?>
      <xml>
      <Config>
      <test>
      <tag1/>
      <tag2>5996</tag2>
      </test>
      </Config>
      </xml>
      again i am not able write anything in that tag from lineedit, can someone give me solution, how to write space or empty text,

      R Offline
      R Offline
      Ratzz
      wrote on 22 Apr 2016, 04:13 last edited by
      #2

      Hi,
      <tag1/> indicates that it is empty

      <tag1/> is same as <tag1></tag1>
      

      http://stackoverflow.com/questions/7238254/xml-what-is-this-null-or-empty-element

      --Alles ist gut.

      N 1 Reply Last reply 22 Apr 2016, 07:35
      0
      • R Ratzz
        22 Apr 2016, 04:13

        Hi,
        <tag1/> indicates that it is empty

        <tag1/> is same as <tag1></tag1>
        

        http://stackoverflow.com/questions/7238254/xml-what-is-this-null-or-empty-element

        N Offline
        N Offline
        Narthan
        wrote on 22 Apr 2016, 07:35 last edited by
        #3

        @Ratzz Thank you for your reply, but again i am not able to write in the tag.,
        For example based on save button i am saving xml file, once i entered only space to line edit, then i enter save button, it will be a empty tag(<tag1/>) in xml file, afterward again i enetered some value to lineedit and entered save button , on that time it is not updating in empty tag,

        1 Reply Last reply
        0
        • V Offline
          V Offline
          VRonin
          wrote on 22 Apr 2016, 07:46 last edited by
          #4

          from http://doc.qt.io/qt-5/qdomdocument.html

          "Text nodes consisting only of whitespace are stripped and won't appear in the QDomDocument. If this behavior is not desired, one can use the setContent() overload that allows a QXmlReader to be supplied."

          "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
          ~Napoleon Bonaparte

          On a crusade to banish setIndexWidget() from the holy land of Qt

          P 1 Reply Last reply 22 Apr 2016, 07:51
          1
          • P Offline
            P Offline
            Paul Colby
            wrote on 22 Apr 2016, 07:46 last edited by
            #5

            It works for me (just replacing your lineEdit with plain text for testing...

            QByteArray xmlData("<?xml version='1.0'?><xml><Config><test><tag1>edit1"
                               "</tag1><tag2>5996</tag2></test></Config></xml>");
            QDomDocument doc("config");
            doc.setContent(xmlData);
            QDomElement root = doc.firstChildElement("xml");
            QDomElement parent = root.firstChildElement("Config");
            QDomElement parent1 = parent.firstChildElement("test");
            QDomElement hostname = parent1.firstChildElement("tag1");
            hostname.firstChild().setNodeValue(" "); // One space.
            QDomElement username = parent1.firstChildElement("tag2");
            username.firstChild().setNodeValue(""); // Empty string.
            qDebug() << doc.toString();
            
            "<?xml version='1.0'?>\n<xml>\n <Config>\n  <test>\n   <tag1> </tag1>\n   <tag2></tag2>\n  </test>\n </Config>\n</xml>\n"
            

            How are you printing the document? And what version of Qt are you using?

            Cheers.

            N 1 Reply Last reply 22 Apr 2016, 07:55
            0
            • V VRonin
              22 Apr 2016, 07:46

              from http://doc.qt.io/qt-5/qdomdocument.html

              "Text nodes consisting only of whitespace are stripped and won't appear in the QDomDocument. If this behavior is not desired, one can use the setContent() overload that allows a QXmlReader to be supplied."

              P Offline
              P Offline
              Paul Colby
              wrote on 22 Apr 2016, 07:51 last edited by
              #6

              @VRonin said:

              from http://doc.qt.io/qt-5/qdomdocument.html

              "Text nodes consisting only of whitespace are stripped and won't appear in the QDomDocument. If this behavior is not desired, one can use the setContent() overload that allows a QXmlReader to be supplied."

              Oh, so its problem with QDomDocument::setContent, eg:

              QByteArray xmlData("<?xml version='1.0'?><xml><Config><test><tag1>edit1"
                                 "</tag1><tag2>5996</tag2></test></Config></xml>");
              QDomDocument doc("config");
              doc.setContent(xmlData);
              QDomElement root = doc.firstChildElement("xml");
              QDomElement parent = root.firstChildElement("Config");
              QDomElement parent1 = parent.firstChildElement("test");
              QDomElement hostname = parent1.firstChildElement("tag1");
              hostname.firstChild().setNodeValue(" "); // One space.
              QDomElement username = parent1.firstChildElement("tag2");
              username.firstChild().setNodeValue(""); // Empty string.
              qDebug() << doc.toString();
              
              QDomDocument doc2;
              doc2.setContent(doc.toString());
              qDebug() << doc2.toString();
              

              Output:

              "<?xml version='1.0'?>\n<xml>\n <Config>\n  <test>\n   <tag1> </tag1>\n   <tag2></tag2>\n  </test>\n </Config>\n</xml>\n"
              "<?xml version='1.0'?>\n<xml>\n <Config>\n  <test>\n   <tag1/>\n   <tag2/>\n  </test>\n </Config>\n</xml>\n"
              

              So the empty space is added correctly, even written to string correctly (doc). It just disappears when its parsed back in again (doc2).

              Cheers.

              1 Reply Last reply
              1
              • P Paul Colby
                22 Apr 2016, 07:46

                It works for me (just replacing your lineEdit with plain text for testing...

                QByteArray xmlData("<?xml version='1.0'?><xml><Config><test><tag1>edit1"
                                   "</tag1><tag2>5996</tag2></test></Config></xml>");
                QDomDocument doc("config");
                doc.setContent(xmlData);
                QDomElement root = doc.firstChildElement("xml");
                QDomElement parent = root.firstChildElement("Config");
                QDomElement parent1 = parent.firstChildElement("test");
                QDomElement hostname = parent1.firstChildElement("tag1");
                hostname.firstChild().setNodeValue(" "); // One space.
                QDomElement username = parent1.firstChildElement("tag2");
                username.firstChild().setNodeValue(""); // Empty string.
                qDebug() << doc.toString();
                
                "<?xml version='1.0'?>\n<xml>\n <Config>\n  <test>\n   <tag1> </tag1>\n   <tag2></tag2>\n  </test>\n </Config>\n</xml>\n"
                

                How are you printing the document? And what version of Qt are you using?

                Cheers.

                N Offline
                N Offline
                Narthan
                wrote on 22 Apr 2016, 07:55 last edited by
                #7

                @Paul-Colby i am opening xml file as you mentioned
                first time when i pressed save button it will show
                <?xml version='1.0'?>
                <xml>
                <tag1> </tag1> // two spaces from line edit
                </xml>

                second time when i presses save button it will show

                <?xml version='1.0'?>
                <xml>
                <tag1/> // some data in lineedit
                </xml>

                third time when i presses save button it will show

                <?xml version='1.0'?>
                <xml>
                <tag1/> // some data in lineedit
                </xml>

                i am using Qt 4.8.7, i am opening xml file , see the result

                1 Reply Last reply
                0

                1/7

                22 Apr 2016, 03:26

                • Login

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