IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC]Parser XML


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut [MFC]Parser XML
    Je souhaite réaliser un parser XML, et j'ai vu sur MSDN qu'il existait une classe
    permettant cela.

    Le probleme, c'est que lorsque je donne ces directive suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #using <mscorlib.dll>
    #using <System.Xml.dll>
    using namespace System;
    using namespace System::IO;
    using namespace System::Xml;
    j'a l'erreur suivante a la compilation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \stdafx.h(22) : fatal error C1021: invalid preprocessor command 'using'
    J'utilise VC++6 et je n'ai jamais utilisé la directive #using, alors je ne sais pas si elle est compatible avec VC6.

    Merci de votre aide

    PS: S'il vous faut des précisions sur mon probleme, demandez, je vous en donnerai... Cette erreur, me bloque completement dans mon projet, au secours!!!!

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    salut
    Citation Envoyé par msdn
    .NET Framework Class Library
    Avec VC6, on ne peut pas utiliser le framework .net

    il te faudra utiliser un autre parser, ou bien passer en .net

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Vu!

    Merci. Je continue de chercher...

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    fait une recherche sur le forum, le sujet a déjà été abordé et il existe des parsers xml gratuit qui ont été cités

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Ok, j'ai trouvé des idées sur CodeProject, mais la j'ai un petit probleme technique...

    Je mets le début du code d'une de mes classes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "stdafx.h"
    #include "Client.h"
     
    #define MAX_BLANKS	1000
     
    using namespace std;
     
    // String constant used for comparison
    // Element names
    static const string ELEMENT_POOL				= "classads";
    static const string ELEMENT_CLIENT				= "c";
    static const string ELEMENT_ATTRIBUTE			= "a";
     
    // Attribute names
    static const string ATTRIBUTE_NAME = "n";
    et la j'ai un probleme à la compilation :

    error C2143: syntax error : missing ';' before 'using'
    je doute que ca vienne de la directive using cette fois...

    Est ce que quelqu'un a déja rencontré le probleme???

    Merci de votre aide

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu n'as pas oublié d'inclure ?

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    sinon, j'ai souvent entendu parler de xerces http://xml.apache.org/xerces-c/ ; et puis, si tu es en MFC, tu peux très bien utiliser facilement les objets COM MSXML

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    En fait j'ai trouvé un exemple qui utilise justement les objets COM MSXML, et j'ai fait l'include dans le .h (Client.h). Est ce que ca ne peut pas etre un craquage du compilateur, j'ai beau retourner mon code, je ne vois pas l'erreur (dans ce fichier tout du moins, est ce que une erreur provenant d'un autre fichier cpp peut entrainer ce genre d'erreur???)

    Si ca peut aider, je peux poster mon code...

    Merci

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    quelle erreur ?

    oui, un peu de code

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    voila le .cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    // Client.cpp: implementation of the CClient class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #include "stdafx.h"
    #include "Client.h"
     
    #define MAX_BLANKS	1000
     
    using namespace std;
     
    // String constant used for comparison
    // Element names
    static const string ELEMENT_POOL				= "classads";
    static const string ELEMENT_CLIENT				= "c";
    static const string ELEMENT_ATTRIBUTE			= "a";
     
    // Attribute names
    static const string ATTRIBUTE_NAME = "n"; 
     
     
    //////////////////////////////////////////////////////////////////////
    // CClient
    //////////////////////////////////////////////////////////////////////
     
    CClient::CClient()
    {
    	m_clientName = "";
    	m_clientState = "";
    	m_clientActivity = "";
    	m_clientOpsys = "";
    	m_clientMemory = "";
     
    }
     
    CClient::~CClient()
    {
    }
     
    //////////////////////////////////////////////////////////////////////
    // CPool
    //////////////////////////////////////////////////////////////////////
     
    CPool::CPool()
    {
    	m_foundPool = false;
    	m_currClient = NULL;
    	m_currClientProperty = CClient::PROPERTY_NONE;
     
    	// create XML parser and attach ourself as the XML event/element handler.
    	m_xmlParser = new CXmlParser;
    	m_xmlParser->AttachElementHandler(this);
    }
     
    CPool::~CPool()
    {
    	DeleteClients();
    	delete m_xmlParser;
    }
     
    void CPool::OnXmlStartElement(const CXmlElement& xmlElement)
    {
    	if ( m_foundPool )
    	{
    		const string& elemName = xmlElement.GetElementName();
     
    		if ( m_currClient == NULL )
    		{
    			// we expect a client element
    			if ( elemName == ELEMENT_CLIENT )
    			{
    				// create a new CClient instance
    				m_currClient = new CClient;
    			}
    		}
    		else
    		{
    			// set the current client property being parsed
    			if ( elemName == ELEMENT_ATTRIBUTE && xmlElement.GetAttributeValue(ATTRIBUTE_NAME) == "Name")
    			{
    				m_currClientProperty = CClient::PROPERTY_NAME;
    			}
    			else if ( elemName == ELEMENT_ATTRIBUTE && xmlElement.GetAttributeValue(ATTRIBUTE_NAME) == "Memory")
    			{
    				m_currClientProperty = CClient::PROPERTY_MEMORY;
    			}
    			else if ( elemName == ELEMENT_ATTRIBUTE && xmlElement.GetAttributeValue(ATTRIBUTE_NAME) == "OpSys")
    			{
    				m_currClientProperty = CClient::PROPERTY_OPSYS;
    			}
    			else if ( elemName == ELEMENT_ATTRIBUTE && xmlElement.GetAttributeValue(ATTRIBUTE_NAME) == "State")
    			{
    				m_currClientProperty = CClient::PROPERTY_STATE;
    			}
    			else if ( elemName == ELEMENT_ATTRIBUTE && xmlElement.GetAttributeValue(ATTRIBUTE_NAME) == "Activity")
    			{
    				m_currClientProperty = CClient::PROPERTY_ACTIVITY;
    			}
     
    		}
    	}
    	else
    	{
    		// we expect a "pool" element
    		if ( xmlElement.GetElementName() == ELEMENT_POOL )
    		{
    			m_foundPool = true;
    		}
    	}
    }
     
    void CPool::OnXmlElementData(const std::string& elementData, int depth)
    {
    	if ( !m_foundPool )
    		return;
    	if ( m_currClient == NULL)
    		return;
     
    	switch ( m_currClientProperty )
    	{
    	case CClient::PROPERTY_NAME:
    		m_currClient->SetClientName(m_currClient->GetClientName() + elementData);
    		break;
    	case CClient::PROPERTY_MEMORY:
    		m_currClient->SetClientMemory(m_currClient->GetClientMemory() + elementData);
    		break;
    	case CClient::PROPERTY_OPSYS:
    		m_currClient->SetClientOpsys(m_currClient->GetClientOpsys() + elementData);
    		break;
    	case CClient::PROPERTY_STATE:
    		m_currClient->SetClientState(m_currClient->GetClientState() + elementData);
    		break;
    	case CClient::PROPERTY_ACTIVITY:
    		m_currClient->SetClientActivity(m_currClient->GetClientActivity() + elementData);
    		break;
    	default:
    		break;
    	}
    }
     
     
    void CPool::OnXmlEndElement(const CXmlElement& xmlElement)
    {
     
    }

    et le .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    // Client.h: interface for the CClient class.
    //
    //////////////////////////////////////////////////////////////////////
     
    #ifndef CLIENT_INCLUDED
    #define CLIENT_INCLUDED
     
    // Include XML wrapper framework
    #include "XmlParser.h"
     
    // stl includes
    #include <string>
    #include <map>
     
    //CMachine
    // La classe suivant décrit un client, en donnant les informations fournies par Condor
    class CClient  
    {
    public:
    	CClient();
    	~CClient();
     
    	enum
        {
            PROPERTY_NONE,
            PROPERTY_NAME,
            PROPERTY_STATE,
            PROPERTY_ACTIVITY,
            PROPERTY_OPSYS,
            PROPERTY_MEMORY
        };
     
        const std::string& GetClientName() const { return m_clientName; }
        void  SetClientName(const std::string& clientName) { m_clientName = clientName; }
     
        const std::string& GetClientState() const { return m_clientState; }
        void  SetClientState(const std::string& clientState) { m_clientState = clientState; }
     
        const std::string& GetClientActivity() const { return m_clientActivity; }
        void  SetClientActivity(const std::string& clientActivity) { m_clientActivity = clientActivity; }
     
        const std::string& GetClientOpsys() const { return m_clientOpsys; }
        void  SetClientOpsys(const std::string& clientOpsys) { m_clientOpsys = clientOpsys; }
     
        const std::string& GetClientMemory() const { return m_clientMemory; }
        void  SetClientMemory(const std::string& clientMemory) { m_clientMemory = clientMemory; }
     
        std::string ToString() const;
     
    private:
    	std::string m_clientName;
    	std::string m_clientState;
    	std::string m_clientActivity;
    	std::string m_clientOpsys;
    	std::string m_clientMemory;
    };
     
     
    //CPool
    // La classe suivante décrit un pool de machines
    class CPool : public IXmlElementHandler
    {
    public:
    	CPool();
    	~CPool();
     
    	// IXmlElementHandler virtual overrides
    	virtual void OnXmlStartElement(const CXmlElement& xmlElement);
    	virtual void OnXmlElementData(const std::string& elementData, int depth);
    	virtual void OnXmlEndElement(const CXmlElement& xmlElement);
    	virtual void OnXmlError(int line, int column, const std::string& errorText, unsigned long errorCode);
    	virtual bool OnXmlAbortParse(const CXmlElement& xmlElement);
     
     
    	// Build the pool from an xml file
    	bool BuildFromXml(std::string& xmlPath);
     
    	// Pool management (appeler ces fonctions pour la mise a jour des CListCtrl)
    	const CClient* FindCient(const std::string& clientName) const;
    	int GetClientCount() const;
    	void DeleteClients();
     
    private:
    	// Used during parsing
    	bool	m_foundPool;
    	CClient*	m_currClient;
    	int m_currClientProperty;
     
    	// XML parser (wrapper class for SAX2)
    	CXmlParser* m_xmlParser;
     
    	// Map keyed on Client Name.
        std::map<std::string,CClient*> m_clients;
     
    }
     
    #endif // !defined(AFX_MACHINE_H__E90BF8C6_43DA_4CD5_8921_0C9D68BEF76F__INCLUDED_)

    l'erreur est toujours la meme :
    \Client.cpp(10) : error C2143: syntax error : missing ';' before 'using'


  11. #11
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    héhé ... l'erreur classique ...

    tu as oublié un ; à la fin de la classe CPool

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    bouhouhou LA honte!!!!

    je vais me coucher!!!!

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XML] Parser XML
    Par RobinJulie dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/02/2005, 08h48
  2. Parser XML -> PDF
    Par ebaynaud dans le forum Modules
    Réponses: 2
    Dernier message: 12/10/2004, 14h07
  3. [SAX] NoSuchElementException sur parser XML
    Par iceman dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 17/05/2004, 14h42
  4. parser xml
    Par billout dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/11/2003, 11h08
  5. Parser XML
    Par miloux32 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 18/07/2003, 03h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo