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. trying to use QXmlParser and friends
Forum Updated to NodeBB v4.3 + New Features

trying to use QXmlParser and friends

Scheduled Pinned Locked Moved Unsolved General and Desktop
18 Posts 3 Posters 1.3k Views 3 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.
  • mzimmersM mzimmers

    @Chris-Kawa oh my goodness, that is a thing of beauty.

    Thanks to all who helped.

    EDIT: actually, I do have a follow-on question: this will allow me to build my map of tags and content. I need to export that map when I'm done. I'm thinking of making the map a member variable, and adding a method that returns it. Is there a better way to do this?

    Chris KawaC Offline
    Chris KawaC Offline
    Chris Kawa
    Lifetime Qt Champion
    wrote on last edited by
    #7

    I'm thinking of making the map a member variable, and adding a method that returns it. Is there a better way to do this?

    So an XMLTagMapMakerHandler? Sounds good to me.

    1 Reply Last reply
    1
    • mzimmersM Offline
      mzimmersM Offline
      mzimmers
      wrote on last edited by
      #8

      Well, I shouldn't have declared victory so quickly. When I migrated my test code into my app, I got this error:

      C:\wifibutton\utility\xmlparser.h:16: error: 'XmlHandler' does not name a type; did you mean 'XmlParser'?
           XmlHandler m_handler;
           ^~~~~~~~~~
           XmlParser
      

      Here are some snippets:

      class XmlHandler : public QXmlDefaultHandler
      {
      private:
          MsgHash m_hash;
      public:
          XmlHandler();
      ...
      }
      
      #include "xmlhandler.h"
      
      class XmlParser
      {
          QXmlSimpleReader m_reader;
          XmlHandler m_handler;
         ...
      }
      

      Is there something special I need to know about sub-classing QXmlDefaultHandler, or am I just brain-fading here?

      Thanks...

      mrjjM 1 Reply Last reply
      0
      • mzimmersM mzimmers

        Well, I shouldn't have declared victory so quickly. When I migrated my test code into my app, I got this error:

        C:\wifibutton\utility\xmlparser.h:16: error: 'XmlHandler' does not name a type; did you mean 'XmlParser'?
             XmlHandler m_handler;
             ^~~~~~~~~~
             XmlParser
        

        Here are some snippets:

        class XmlHandler : public QXmlDefaultHandler
        {
        private:
            MsgHash m_hash;
        public:
            XmlHandler();
        ...
        }
        
        #include "xmlhandler.h"
        
        class XmlParser
        {
            QXmlSimpleReader m_reader;
            XmlHandler m_handler;
           ...
        }
        

        Is there something special I need to know about sub-classing QXmlDefaultHandler, or am I just brain-fading here?

        Thanks...

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #9

        @mzimmers
        Just to be sure its not that.
        Does xmlparser.h include XmlHandler.h and reverse ?
        (circular include)

        mzimmersM 1 Reply Last reply
        0
        • mrjjM mrjj

          @mzimmers
          Just to be sure its not that.
          Does xmlparser.h include XmlHandler.h and reverse ?
          (circular include)

          mzimmersM Offline
          mzimmersM Offline
          mzimmers
          wrote on last edited by
          #10

          @mrjj no. xmlparser.h includes xmlhandler.h, but not the other way around.

          mrjjM 1 Reply Last reply
          0
          • mzimmersM mzimmers

            @mrjj no. xmlparser.h includes xmlhandler.h, but not the other way around.

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #11

            @mzimmers
            Ok, just had to be sure :)

            It simply says it don't know type so it don't see the include for some reason.

            Did you try clean all, rebuild ?

            1 Reply Last reply
            0
            • mzimmersM Offline
              mzimmersM Offline
              mzimmers
              wrote on last edited by
              #12

              Yes, I did.

              Here's the complete code from the headers:

              xmlhandler.h

              #ifndef XMLHANDLER_H
              #define XMLHANDLER_H
              
              
              #include <QXmlDefaultHandler>
              
              #include "message.h"
              
              using namespace std;
              
              class XmlHandler : public QXmlDefaultHandler
              {
              private:
                  MsgHash m_hash;
                  bool m_tagStarted = false;
                  QString m_tag;
                  QString m_data;
                  QXmlInputSource *m_source;
              
              public:
                  XmlHandler();
                  ~XmlHandler();
                  bool startElement(const QString &uri,
                                    const QString &local,
                                    const QString &name,
                                    const QXmlAttributes &atts) override;
                  bool endElement(const QString &uri,
                                    const QString &local,
                                    const QString &name) override;
                  bool characters(const QString &ch) override;
                  void getHash(MsgHash &msgHash) {msgHash = m_hash;}
              };
              
              
              #endif // XMLHANDLER_H
              

              xmlparser.h:

              #ifndef XMLPARSER_H
              #define XMLPARSER_H
              
              #include <stdint.h>
              
              #include <QXmlDefaultHandler>
              #include <QXmlSimpleReader>
              
              #include "constants.h"
              #include "message.h"
              #include "xmlhandler.h"
              
              class XmlParser
              {
                  QXmlSimpleReader m_reader;
                  XmlHandler m_handler;
              public:
                  XmlParser();
                  ~XmlParser();
                  int process(string xml, MsgHash &msgHash);
              };
              
              #endif // XMLPARSER_H
              
              1 Reply Last reply
              0
              • mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #13

                Hi
                It looks ok.
                Could you try add some dummy class to the xmlhandler.h

                class Test {
                };

                and see if it can see that symbol ?

                just to test it dont see the include and not something with class XmlHandler

                mzimmersM 1 Reply Last reply
                0
                • mrjjM mrjj

                  Hi
                  It looks ok.
                  Could you try add some dummy class to the xmlhandler.h

                  class Test {
                  };

                  and see if it can see that symbol ?

                  just to test it dont see the include and not something with class XmlHandler

                  mzimmersM Offline
                  mzimmersM Offline
                  mzimmers
                  wrote on last edited by mzimmers
                  #14

                  @mrjj good test -- it didn't see that either. I wonder if XMLHANDLER_H is a reserved term...?

                  ANSWER: no it isn't...

                  mrjjM 1 Reply Last reply
                  0
                  • mzimmersM mzimmers

                    @mrjj good test -- it didn't see that either. I wonder if XMLHANDLER_H is a reserved term...?

                    ANSWER: no it isn't...

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #15

                    @mzimmers

                    Hmm can you check your .pro file its not listed 2 times ?

                    Also
                    can you please inspect both files
                    with Include Hierarchy?

                    alt text
                    The last.

                    and see if you see anything odd.

                    mzimmersM 2 Replies Last reply
                    1
                    • mrjjM mrjj

                      @mzimmers

                      Hmm can you check your .pro file its not listed 2 times ?

                      Also
                      can you please inspect both files
                      with Include Hierarchy?

                      alt text
                      The last.

                      and see if you see anything odd.

                      mzimmersM Offline
                      mzimmersM Offline
                      mzimmers
                      wrote on last edited by
                      #16

                      @mrjj that wasn't it exactly, but you put me on the right track. I'll report back in a bit.

                      Thanks...

                      1 Reply Last reply
                      0
                      • mrjjM mrjj

                        @mzimmers

                        Hmm can you check your .pro file its not listed 2 times ?

                        Also
                        can you please inspect both files
                        with Include Hierarchy?

                        alt text
                        The last.

                        and see if you see anything odd.

                        mzimmersM Offline
                        mzimmersM Offline
                        mzimmers
                        wrote on last edited by
                        #17

                        @mrjj great suggestion there! Long story short, I had a cyclic dependency. Thanks for your help on this.

                        1 Reply Last reply
                        1
                        • mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #18

                          Super :)
                          Well it's my number one suspect when it says "don't know symbol"
                          and you check you have the header included and all seem fine.

                          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