Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme de lecture XML [ Divers / Divers ] (jojomillenium)

samedi 26 mai 2007 à 18:40:19 | Probleme de lecture XML

jojomillenium

Bonjour,
(C++.NET form application sous VS2003)
J'aimerai pouvoir lire un fichier XML seulment je n y arrive pas, j ai trouver plusieurs exemple sur le net mais aucun ne fonctionne.
Celui qui me semble le plus simple est le suivant (code ci dessous) mais lorsqu'il arrive a "while(reader->Read())" il plant et me fait
"An unhandled exception of type 'System.Xml.XmlException' occuredin system.xml.dll
Additional information: Erreur système."

Mais je comprend pas d ou ca peut venir! Lorsque je crée un nouveau projet console ca fonctionne, mais lorsque je veux l ajouter dans mon projet la ca plante!

voici le code avec mes headers, biensur je met en commentaire les parties consoles dans mon projet.
Avez vous une idée de ou ca peut venir? Ou connaissez vous une autre facon de faire?
merci beaucoup pour votre aide, ca fait 1 semaines que je plante sur ce point et que j essaie de lire un fichier xml.


#pragma once
#include <CVisionManager_managed.h>
#include <ctime>
#undef MessageBox
#include <windows.h>
#include <msxml.h>
#include <string>
#include "stdafx.h"
#include <tchar.h>
#using <mscorlib.dll>
#using <System.xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;

void MyXMLReader(void)
{
    XmlTextReader* reader = new XmlTextReader ("config.xml");

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);

                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    Console::ReadLine();
}


samedi 26 mai 2007 à 18:44:17 | Re : Probleme de lecture XML

jojomillenium

Au fait ma deuxieme alternative que j avais trouvé est la suivante, mais lorsque au lieu de faire
  iXMLDoc->loadXML(CComBSTR(src),&bSuccess); je fait le
iXMLDoc->load(CComVariant(url),&bSuccess); avec comme url "config.xml" ca me sort n importe quoi, il ne le lis pas comme il faut apparement!

Encore merci pour votre aide

#include <windows.h>
#include <msxml.h>
#include <objsafe.h>
#include <objbase.h>
#include <atlbase.h>
#pragma warning( push )
#pragma warning( disable: 4018 4786)
#include <string>
#pragma warning( pop )
using namespace std;



const wchar_t *src=L""
  L"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n"
  L"<root desc=\"Simple Prog\">\r\n"
  L"  <text>Hello World</text>\r\n"
  L"    <layouts>\r\n"
  L"    <lay pos=\"15\" bold=\"true\"/>\r\n"
  L"    <layoff pos=\"12\"/>\r\n"
  L"    <layin pos=\"17\"/>\r\n"
  L"  </layouts>\r\n"
  L"</root>\r\n";




// TElem -- a simple class to wrap up IXMLDomElement and iterat its children.
//   name()    - in <item>stuff</item> it returns "item"
//   val()     - in <item>stuff</item> it returns "stuff"
//   attr(s)   - in <item s=L"hello">stuff</item> it returns "hello"
//   subnode(b)- in <item><a>hello</a><b>there</b></item> it returns the TElem <b>there</b>
//   subval(b) - in <item><a>hello</a><b>there</b></item> it returns "there"
//   for (TElem c=e.begin(); c!=e.end(); c++) {...} - iterators over the subnodes
struct TElem
{ CComPtr<IXMLDOMElement> elem;
  CComPtr<IXMLDOMNodeList> nlist; int pos; long clen;
  //
  TElem() : elem(0), nlist(0), pos(-1), clen(0) {}
  TElem(int _clen) : elem(0), nlist(0), pos(-1), clen(_clen) {}
  TElem(CComPtr<IXMLDOMElement> _elem) : elem(_elem), nlist(0), pos(-1), clen(0) {get();}
  TElem(CComPtr<IXMLDOMNodeList> _nlist) : elem(0), nlist(_nlist), pos(0), clen(0) {get();}
  void get()
  { if (pos!=-1)
    { elem=0;
      CComPtr<IXMLDOMNode> inode;
      nlist->get_item(pos,&inode);
      if (inode==0) return;
      DOMNodeType type; inode->get_nodeType(&type);
      if (type!=NODE_ELEMENT) return;
      CComQIPtr<IXMLDOMElement> e(inode);
      elem=e;
    }
    clen=0; if (elem!=0)
    { CComPtr<IXMLDOMNodeList> iNodeList;
      elem->get_childNodes(&iNodeList);
      iNodeList->get_length(&clen); 
    }
  }
  //
  wstring name() const
  { if (!elem) return L"";
    CComBSTR bn; elem->get_tagName(&bn);
    return wstring(bn);
  }
  wstring attr(const wstring name) const
  { if (!elem) return L"";
    CComBSTR bname(name.c_str());
    CComVariant val(VT_EMPTY);
    elem->getAttribute(bname,&val);
    if (val.vt==VT_BSTR) return val.bstrVal;
    return L"";
  }
  bool attrBool(const wstring name,bool def) const
  { wstring a = attr(name);
    if (a==L"true" || a==L"TRUE") return true;
    else if (a==L"false" || a==L"FALSE") return false;
    else return def;
  }
  int attrInt(const wstring name, int def) const
  { wstring a = attr(name);
    int i, res=swscanf(a.c_str(),L"%i",&i);
    if (res==1) return i; else return def;
  }
  wstring val() const
  { if (!elem) return L"";
    CComVariant val(VT_EMPTY);
    elem->get_nodeTypedValue(&val);
    if (val.vt==VT_BSTR) return val.bstrVal;
    return L"";
  }
  TElem subnode(const wstring name) const
  { if (!elem) return TElem();
    for (TElem c=begin(); c!=end(); c++)
    { if (c.name()==name) return c;
    }
    return TElem();
  }
  wstring subval(const wstring name) const
  { if (!elem) return L"";
    TElem c=subnode(name);
    return c.val();
  }
  TElem begin() const
  { if (!elem) return TElem();
    CComPtr<IXMLDOMNodeList> iNodeList;
    elem->get_childNodes(&iNodeList);
    return TElem(iNodeList);
  }
  TElem end() const
  { return TElem(clen);
  }
  TElem operator++(int)
  { if (pos!=-1) {pos++; get();}
    return *this;
  }
  bool operator!=(const TElem &e) const
  { return pos!=e.clen;
  }
};




void test()
{
  CComPtr<IXMLDOMDocument> iXMLDoc;
  iXMLDoc.CoCreateInstance(__uuidof(DOMDocument));
    
  // Following is a bugfix for PocketPC.
#ifdef _UNDER_CE
  gargle bargle
  iXMLDoc->put_async(VARIANT_FALSE);
  CComQIPtr<IObjectSafety,&IID_IObjectSafety> iSafety(iXMLDoc);
  if (iSafety)
  { DWORD dwSupported, dwEnabled;
    iSafety->GetInterfaceSafetyOptions(IID_IXMLDOMDocument,&dwSupported,&dwEnabled);
    iSafety->SetInterfaceSafetyOptions(IID_IXMLDOMDocument,dwSupported,0);
  }
#endif

  // Load the file.
  VARIANT_BOOL bSuccess=false;
  // Can load it from a url/filename...
  //iXMLDoc->load(CComVariant(url),&bSuccess);
  // or from a BSTR...
  iXMLDoc->loadXML(CComBSTR(src),&bSuccess);

  // Get a pointer to the root
  CComPtr<IXMLDOMElement> iRootElm;
  iXMLDoc->get_documentElement(&iRootElm);

  // Thanks to the magic of CComPtr, we never need call
  // Release() -- that gets done automatically.


  TElem eroot(iRootElm);
  wstring desc = eroot.attr(L"desc");
  // returns "Simple Prog"

  TElem etext = eroot.subnode(L"text");
  wstring s = etext.val();
  // returns "Hello World"
  s = eroot.subval(L"text");
  // This is a shorter way to achieve the same thing

  TElem elays = eroot.subnode(L"layouts");
  for (TElem e=elays.begin(); e!=elays.end(); e++)
  { int pos = e.attrInt(L"pos",-1);
    bool bold = e.attrBool(L"bold",false);
    // we suggest default values, in case the attribute is missing
    wstring id = e.name();
    // returns "lay" or "layoff" or "layin"
  }
}

#ifdef UNDER_CE
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPTSTR,int)
{ CoInitializeEx(NULL,COINIT_MULTITHREADED);
  test();
  CoUninitialize();
  return 0;
}
#else
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{ CoInitialize(NULL);
  test();
  CoUninitialize();
  return 0;
}
#endif




Cette discussion est classé dans : system, include, xml, console, reader


Répondre à ce message

Sujets en rapport avec ce message

adaptation code console vers MFC [ par gege1024 ] voila, j'ai un code qui prend des parametres donnés par des ligne de commande, mais je voudrais l'adapter pour en faire une interface graphique.j'ai r Comment récupérer le flux de la cmd system dans une variable [ par PRZYBYLSKI ] J'ai une questionComment je peux recuperer le flux de la cmd system dans une variable.Cette exemple est juste une image qlq peut me mettre sur la voie system(.....) aidé moi c'est tout con [ par xionoxid ] salutIl me faut un bug svp aidé moi ou est là faute ??#include #include int main(){ char a[10]; cout cin >> a; comment faire pour lire un fichier contenant des caractères Unicode ? [ par michelcreve ] - J'essai de faire un Utilitaire de reformatage d'un fichier lu en entrée et création d'un autre fichier en sortie. - Le programme demande le chemin d Erreur C2143 qui ne devrait pas etre la [ par DJ_FleX ] Bonjour à tous.Bon je vous cache pas que je déteste C++ .NET. Je viens d'apprendre ce langage cette année, et ca arrete pas de planté pour un rien.J'a probleme [ par chinois57 ] bjr tt le monde voila g un probleme je voudrer maitre ce code ( en C) qui marche en console dans une fenetre windows application merci de maider   #in Problème avec la fonction system() [ par bouba ] Bonjour, dans un programme de dois lancer d'autres exécutables. J'ai utilisé la fonction system() pour réaliser l'exécution des ces progs. Ca marche m Sérialisation Winform [ par postal ] Bonjour,Je débute avec Visual C++, et je travaille actuellement sur une application qui lance une fenêtre  principale qui permet à son tour de lancer getpixel() en mode console ?? [ par kirby94460 ] Bonjour j'utilise dev c++ en mode console et en mode C(nn pas C++) voici mon code :#include #include #include #include <br Pb avec la fonction system ("shutdown....") [ par heresia83 ] Bonjour ! Je débute en C.. et je n'arrive pas à faire fonctionner la fonction "system".J'ai fait de nombreuses recherches, notamment sur ce forum, j'a


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.