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. Appending to xml
Forum Updated to NodeBB v4.3 + New Features

Appending to xml

Scheduled Pinned Locked Moved Solved General and Desktop
21 Posts 4 Posters 8.6k 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.
  • chawilaC chawila

    @JNBarchan

    itried it still get: Calling appendChild() on a null node does nothing.
    So what are u suggesting about QIODevice::Append.

    JonBJ Online
    JonBJ Online
    JonB
    wrote on last edited by JonB
    #11

    @chawila said in Appending to xml:

    @JNBarchan

    itried it still get: Calling appendChild() on a null node does nothing.

    So for your root.appendChild(productTag ), debug out both root & productTag?

    So what are u suggesting about QIODevice::Append.

    For what you want to do, you cannot use root.appendChild(productTag ) and you cannot "append to the existing XML in the file" in any shape or form. I think from what you're saying you want to:

    1. Read in the whole existing XML file to create the document.
    2. Do your code which alters the DOM by appending new nodes or whatever.
    3. Overwrite the complete file with the serialization of the complete DOM document, i.e. no appending, just like creating it from scratch.
    1 Reply Last reply
    0
    • chawilaC Offline
      chawilaC Offline
      chawila
      wrote on last edited by
      #12

      @JNBarchan
      I got compilation Error:

      No match for 'operator'<<(operand types are 'QDeburg' and QDomElement')
             qDebug() << root << productTag ;
      

      So how can i do that?..

      • Read in the whole existing XML file to create the document.

      • Do your code which alters the DOM by appending new nodes or whatever.

      • Overwrite the complete file with the serialization of the complete DOM document, i.e. no appending, just like creating it from scratch.

      JonBJ 1 Reply Last reply
      0
      • chawilaC chawila

        @JNBarchan
        I got compilation Error:

        No match for 'operator'<<(operand types are 'QDeburg' and QDomElement')
               qDebug() << root << productTag ;
        

        So how can i do that?..

        • Read in the whole existing XML file to create the document.

        • Do your code which alters the DOM by appending new nodes or whatever.

        • Overwrite the complete file with the serialization of the complete DOM document, i.e. no appending, just like creating it from scratch.

        JonBJ Online
        JonBJ Online
        JonB
        wrote on last edited by JonB
        #13

        @chawila
        Outline code:

        if (append)
        {
          openFileForReadOnly();
          readFileToCreateDOM();
          closeFile();
        }
        else
        {
          createNewEmptyDom();
          possiblyCreateEmptyProductsNode();
        }
        doCodeToPutNewProductNodesUnderProductsNode();
        saveWholeDOMDocumentToFileWithOverwrite();
        

        No ReadWrites or Appends ; Truncate only used in saveWholeDOMDocumentToFileWithOverwrite() if that's what is required to overwrite. See e.g. https://forum.qt.io/topic/43724/solved-save-qdomdocument-to-xml or http://www.qtforum.org/article/2756/how-to-qdomdocument-to-file.html. e.g. file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text ) when you're ready to overwrite.

        1 Reply Last reply
        0
        • chawilaC Offline
          chawilaC Offline
          chawila
          wrote on last edited by
          #14

          @JNBarchan

          So all these:

            openFileForReadOnly();
            readFileToCreateDOM();
          //-----------------------
            createNewEmptyDom();
            possiblyCreateEmptyProductsNode();
          //--------------------
          doCodeToPutNewProductNodesUnderProductsNode();
          saveWholeDOMDocumentToFileWithOverwrite();
          

          Are methods/functions i should create

          JonBJ 1 Reply Last reply
          0
          • chawilaC chawila

            @JNBarchan

            So all these:

              openFileForReadOnly();
              readFileToCreateDOM();
            //-----------------------
              createNewEmptyDom();
              possiblyCreateEmptyProductsNode();
            //--------------------
            doCodeToPutNewProductNodesUnderProductsNode();
            saveWholeDOMDocumentToFileWithOverwrite();
            

            Are methods/functions i should create

            JonBJ Online
            JonBJ Online
            JonB
            wrote on last edited by JonB
            #15

            @chawila
            Well, yes!
            For:

              createNewEmptyDom();
              possiblyCreateEmptyProductsNode();
            

            you already had:

                 root = doc.createElement("Products");
                 doc.appendChild(root);
            

            (provided your DOM doc starts out empty).

            BTW

            QIODevice::WriteOnly 0x0002 The device is open for writing. Note that this mode implies Truncate.

            1 Reply Last reply
            0
            • chawilaC Offline
              chawilaC Offline
              chawila
              wrote on last edited by
              #16

              @JNBarchan
              Ok i`ll keep on trying,
              but u are giving me a big task(reaserch) to do..

              JonBJ 1 Reply Last reply
              0
              • chawilaC chawila

                @JNBarchan
                Ok i`ll keep on trying,
                but u are giving me a big task(reaserch) to do..

                JonBJ Online
                JonBJ Online
                JonB
                wrote on last edited by JonB
                #17

                @chawila
                Sorry, I don't see any "big task" or "research" for you to do?
                You already seem to know how to read a file to QDomDocument, add nodes to it, and write it out, that's all we're doing.

                1 Reply Last reply
                0
                • chawilaC Offline
                  chawilaC Offline
                  chawila
                  wrote on last edited by
                  #18

                  @JNBarchan
                  Let me get into it i`ll be back, hopefully with good news..

                  JonBJ 1 Reply Last reply
                  0
                  • chawilaC chawila

                    @JNBarchan
                    Let me get into it i`ll be back, hopefully with good news..

                    JonBJ Online
                    JonBJ Online
                    JonB
                    wrote on last edited by JonB
                    #19

                    @chawila
                    It is your use of "append to xml file" that is faulty. To add new nodes, you do not literally "append" them to the whole file, you add (append/insert) them near the end of the file but not literally at the end of the file.

                    P.S.
                    You can probably use QDomDocument::save(QTextStream) as one way of saving the dom doc back to file, if you like.

                    1 Reply Last reply
                    0
                    • chawilaC Offline
                      chawilaC Offline
                      chawila
                      wrote on last edited by
                      #20

                      @JNBarchan
                      Thanks,
                      it was little bit challenging though..

                      JonBJ 1 Reply Last reply
                      0
                      • chawilaC chawila

                        @JNBarchan
                        Thanks,
                        it was little bit challenging though..

                        JonBJ Online
                        JonBJ Online
                        JonB
                        wrote on last edited by
                        #21

                        @chawila
                        Well, I'm sorry but "appending to an XML file" is "a bit challenging", because as you've seen you don't quite want to do that... :)

                        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