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. Generating an XML file
Qt 6.11 is out! See what's new in the release blog

Generating an XML file

Scheduled Pinned Locked Moved General and Desktop
14 Posts 4 Posters 15.9k 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.
  • A Offline
    A Offline
    Arukas
    wrote on last edited by
    #3

    I found one of the problems to my questions, but it made another problem. There's a setAutoFormatting to true, but it does no autoformating. I also followed the example in the Qt Help file.

    I'm still having problem creating roots.

    1 Reply Last reply
    0
    • A Offline
      A Offline
      andre
      wrote on last edited by
      #4

      Could you show a small sample of the XML you'd like to generate, and the code you are now using to try to generate that?

      1 Reply Last reply
      0
      • A Offline
        A Offline
        Arukas
        wrote on last edited by
        #5

        Here is a sample XML

        @<?xml verision="1.0"?>
        <!-- Space for Rent -->
        <Forest>
        <Number_of_Trees>200</Trees>
        <Tree_1 bark="mossy" leaves="none" nest="lots"/>
        <Animals>
        <!-- Legally distinguable from Bambi -->
        <Rabbit>Thumperette</Rabbit>
        <Skunk>Rose</Skunk>
        </Animals>
        </Forest>@

        Here is how I started with the code:

        @QXmlStreamWriter writer(&file);
        writer.setAutoFormatting(true);
        writer.writeStartDocument("1.0");
        writer.writeComment("Space for Rent);@

        That is as far as I have gotten. I can't figure out how to make the <Forest> and <Animals> parts. I don't know what function covers that. I played around with the functions and still haven't figured out how to make it what I want to do.

        When I open it up in a text editior, everything is on the same line, which will ultimately make it hard to read for humans. And I haven't messed with the other stuff much because if I can't do the roots and sub roots, I'll have to use another method.

        -Arukas

        1 Reply Last reply
        0
        • A Offline
          A Offline
          andre
          wrote on last edited by
          #6

          Well, you could continue like this:
          @
          writer.writeStartElement("Forest");
          writer.writeTextElement("Number_of_Trees", QString::number(200));
          writer.writeStartElement("Tree_1");
          writer.writeAttribute("bark", "mossy");
          writer.writeAttribute("leaves", "none");
          writer.writeAttribute("nest", "lots");
          writer.writeEndElement(); //Tree_1
          //...
          writer.writeEndElement(); //Forest;
          writer.writeEndDocument(); // End of document
          @

          Note: code not tested, just typed into the forum reply...

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Arukas
            wrote on last edited by
            #7

            I appreciate the help. That got me started on what I need to do, and works great. However, I still have one problem.

            This line
            @writer.setAutoFormatting(true);@

            The description says it suppose to add line breaks to add to the readability. However, it does not add any line breaks. All I can figure out is how to adjust the number of spaces.

            Thanks,
            Arukas

            1 Reply Last reply
            0
            • A Offline
              A Offline
              andre
              wrote on last edited by
              #8

              That is strange... I have no clue what is going wrong for you then. It works for me.

              1 Reply Last reply
              0
              • A Offline
                A Offline
                Arukas
                wrote on last edited by
                #9

                I see the standard 4 spaces which is the default. Maybe I'm doing something wrong when I open the files, but I really doubt it.

                Is there a way I can force those line breaks?

                1 Reply Last reply
                0
                • G Offline
                  G Offline
                  goetz
                  wrote on last edited by
                  #10

                  writer.setAutoFormatting(true) works for me.

                  The lines are separated by a single newline, maybe your editor does not recognize that as a line break.

                  http://www.catb.org/~esr/faqs/smart-questions.html

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    Arukas
                    wrote on last edited by
                    #11

                    I've been using notepad to open files. I tried wordpad and it works fine.

                    Now that I'm thinking, I had a problem like this before. My understanding, in the past you needed two things to get to the next line. You needed a carriage return to get back to the beginning of the line and a line feed to start a new line. Although, I'm not sure how to correct it. Only reason I think I know this is I was doing something in Linux and tried it in Windows and wondered why it didn't work.

                    I think it, is how I am opening the file. This is the only way I know how to open files in Qt. Is a different way to correct the problem.

                    @ QString filename="F.xml";
                    QFile file;
                    file.setFileName(filename);@

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      goetz
                      wrote on last edited by
                      #12

                      There are three kinds of marking a new line:

                      • LF (\n)
                        a single newline character
                        the usual way on Unix, Linux and Mac OS X
                      • CRLF (\r\n)
                        a carriage return followed by a newline
                        that's commonly used on Windows
                      • CR (\r)
                        a single carriage return
                        that was used by Mac OS up to version 9

                      See wikipedia on "Newline":http://en.wikipedia.org/wiki/Newline for some more details.

                      Notepad is known to work only with the traditional Windows CRLF line endings, while Wordpad is able to handle pure LF too. I personally avoid Notepad completely for that purpose.

                      Regarding your QFile questions:

                      You can combine the first two lines together into one:

                      @
                      QFile file("F.xml");
                      @

                      A possible solution to the line ending problem could be to open the file in text mode:

                      @
                      QFile file("F.xml");
                      if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
                      // handle the error here
                      }
                      @

                      bq. *The QIODevice::Text docs state:"
                      When reading, the end-of-line terminators are translated to '\n'. When writing, the end-of-line terminators are translated to the local encoding, for example '\r\n' for Win32.

                      Make sure that the software/classes reading your XML can handle the CRLF too.

                      I personally avoid the QIODevice::Text flag, though. It's rarely needed nowadays.

                      http://www.catb.org/~esr/faqs/smart-questions.html

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        andre
                        wrote on last edited by
                        #13

                        [quote author="Arukas" date="1323216964"]I've been using notepad to open files. I tried wordpad and it works fine.[/quote]
                        Might I suggest you get yourself a decent text editor, like "Notepad++":http://notepad-plus-plus.org/ perhaps?

                        1 Reply Last reply
                        0
                        • F Offline
                          F Offline
                          fluca1978
                          wrote on last edited by
                          #14

                          Emacs runs even on Windows!

                          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