Parsing XML Document DOM à l'aide de VC + +


eXtensible Markup Language (XML) est la norme de l'industrie pour échanger de l'information. XML permet aux utilisateurs de définir leurs propres tags. Ces balises sont ensuite utilisées pour définir les types de données. Par exemple, <author> Syed Feroz Zainvi </ author>.
Un document XML a une structure hiérarchique. Au sommet, il ya un document de la racine suivie par d'autres nœuds, mai qui ont à leur tour d'autres nœuds. Il y mai être des attributs et des données associées à ces noeuds.
Analyseurs XML sont des outils utilisés pour lire ou écrire un document XML. Ces analyseurs sont fondées soit sur DOM (Document Object Model) ou SAX (Simple API for XML) standards. Une comparaison des méthodes DOM et SAX est accordée dans de nombreux livres et sur des sites Web ainsi.
Dans cet article, vous apprendrez à lire et à extraire des informations d'un document XML en VC + + application. Il est supposé que vous avez l'expérience de base de l'utilisation de Microsoft Visual Studio 6.0 (MSIDE) pour créer des applications de VC + +.
- Télécharger la dernière MSXML SDK de http://www.microsoft.com/. Double-cliquez sur le programme d'installation téléchargé pour installer le SDK. L'installation va créer un dossier de départ avec MSXML chemin dans votre jeu comme C: ou C: \ Program Files. Ce dossier contient des sous-dossiers inc et lib, qui contient les bibliothèques et fichiers d'en-tête nécessaires pour le développement d'applications. Aussi, msxmlX.dll, msxmlXr.dll - où X est la version (la dernière étant de 6) - va être copié dans C: \ Windows \ System32.
- Créez un nouveau projet en utilisant MSIDE. Il peut être de tout type - Application MFC, Win32 console application, etc
- Suivant créer un fichier d'en-tête et un fichier source à votre code d'analyse XML.
- Inclure MSXML têtes et les bibliothèques manuellement ou automatiquement. Manuellement, cela peut être fait par l'ajout de chemin d'installation et de bibliothèques sous les onglets respectifs de la boîte de dialogue qui s'ouvre dans le cadre du projet du menu Paramètres de MSIDE. Il est préférable de le faire automatiquement par le simple ajout de deux lignes de code dans votre fichier d'en-tête. <msxml6.dll> # Import named_guids
using namespace MSXML2; - Aussi, dans votre fichier d'en-tête mis déclarations suivantes: IXMLDOMDocumentPtr m_plDomDocument;
IXMLDOMElementPtr m_pDocRoot;void DisplayChildren (IXMLDOMNodePtr pParent);
void DisplayChild (IXMLDOMNodePtr pChild);
void DisplayAttributes (IXMLDOMNodePtr pChild, string parent, string & apname);
void InitialiseXMLCOM (CString fomFileName);bool chargé;
- Et puisque la chaîne de caractères est utilisé, ajouter des lignes suivantes à votre fichier d'entête: # include "string"
using namespace std; - Après ces paramètres du projet, vous avez besoin d'écrire du code pour charger un document XML. Microsoft COM (Component Object Model) est le module utilisé. Bien que je sois mise commentaires avant d'utiliser la fonction COM, les lecteurs intéressés peuvent consulter la documentation COM ailleurs. Chargées = true;
/ / pour initialiser le module COM
:: CoInitialize (NULL);/ / créer une instance de document XML
HRESULT hr = m_plDomDocument.CreateInstance (L "Msxml2.DOMDocument.6.0");/ / check pas la création d'une instance et d'affichage de l'erreur avant d'annuler
if (FAILED (hr))
(
_com_error er (hr);
AfxMessageBox (er.ErrorMessage ());
EndDialog (1);
)/ / Convertir le nom du fichier xml string à quelque chose peut traiter COM (BSTR)
_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString ();/ / Appel de la fonction de charge de la IXMLDOMDocumentPtr pour charger le document XML
variant_t vResult;
vResult = m_plDomDocument-> load (bstrFileName);/ / si le chargement est réussi alors obtenir l'élément racine du document
if (((bool) vResult) == TRUE) / / succès!
(
/ / Maintenant que le document est chargé, nous avons besoin d'initialiser le pointeur de la racine
m_pDocRoot = m_plDomDocument-> documentElement;/ / Après la fonction récursivement parcourir l'arbre XML pour les enfants, les frères et sœurs et les nœuds
DisplayChildren (m_pDocRoot);
)
autre
(
AfxMessageBox ( "Impossible de charger le document!");
) - Maintenant, le temps de parcourir l'arborescence contenue dans le document XML. Suite à cela des fonctions récursivement.
void DisplayChildren (IXMLDOMNodePtr pParent)
(
/ / Affiche le nom du noeud
DisplayChild (pParent);/ / Simple boucle for pour tous les enfants
for (IXMLDOMNodePtr pChild = pParent-> firstChild;
NULL! = PChild;
pChild = pChild-> nextSibling)
(
/ / Pour chaque enfant, appeler cette fonction afin que nous nous
/ / De ses enfants ainsi
DisplayChildren (pChild);
)
)void DisplayChild (IXMLDOMNodePtr pChild)
(
IXMLDOMElementPtr pElem1, pElem2;
string CID, apname;/ / vérifier si un enfant de son noeud. Deuxième condition montre comment vous pouvez vérifier le nom du noeud
if (NODE_ELEMENT == pChild-> nodeType & & (pChild-> nodeName) == _bstr_t ( "Somename"))
(
HR1 HRESULT = pChild-> QueryInterface (MSXML2:: IID_IXMLDOMElement, (void **) & pElem1);
if (FAILED (HR1)) (_com_raise_error (HR1);)CID = static_cast <string> ((_bstr_t) (pElem1-> getAttribute (_T ( "nom "))));
/ / Process récursivement tous ses frères et sœurs et d'extraire de leurs attributs
for (IXMLDOMNodePtr pChild1 = pChild-> firstChild;
NULL! = PChild1;
pChild1 = pChild1-> nextSibling)
(
DisplayAttributes (pChild1, CID, apname);)
)
)
- Pour chaque nœud, extrait de ses attributs. Après utilise même demande que la fonction ci-dessus. DisplayAttributes void (IXMLDOMNodePtr pChild, cid string, string et CIDS)
(
IXMLDOMElementPtr pElem;if (NODE_ELEMENT == pChild-> nodeType & & (pChild-> nodeName == _bstr_t ( "somename1") | | pChild-> nodeName == _bstr_t ( "attribut")))
(
HR1 HRESULT = pChild-> QueryInterface (MSXML2:: IID_IXMLDOMElement, (void **) & pElem);
if (FAILED (HR1)) (_com_raise_error (HR1);)CID = static_cast <string> ((_bstr_t) (pElem-> getAttribute (_T ( "nom "))));
)
else (/ /, comme dans d'autres conditions différentes noeud nom
(
)
) - Les utilisateurs intéressés peuvent explorer les DOM créer dynamiquement, l'interrogation de documents XML en utilisant XPath, l'édition et l'enregistrement de document XML.

Delicious
Digg
Google
Yahoo