Bonjour,
Pour la gestion des fichiers xml, j'ai utilisé la dll msxml4.dll.
Avant de lire un fichier xml, je veux vérifer qu'il est conforme à un DTD (fichier xsd).
J'ai pas trouvé un lien qui décrit mon besoin.
Merci d'avance pour vos réponses.
Bonjour,
Pour la gestion des fichiers xml, j'ai utilisé la dll msxml4.dll.
Avant de lire un fichier xml, je veux vérifer qu'il est conforme à un DTD (fichier xsd).
J'ai pas trouvé un lien qui décrit mon besoin.
Merci d'avance pour vos réponses.
J'ai trouvé la solution suivante:
Mais, la fonction CreateInstance (dans la 2ème ligne) retourne -2147221008. Et par la suite la création de l'instance a échoué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 IXMLDOMSchemaCollectionPtr pSchemaCache; hr =pSchemaCache.CreateInstance(__uuidof(XMLSchemaCache40)); if(FAILED(hr) { return; } pSchemaCache->add("", "Schema.xsd"); pXMLDoc->schemas =pSchemaCache.GetInterfacePtr(); if(pXMLDoc->validate()) { // Fichier valide }
Il manque la fonction CoInitialize(NULL):
Mais dans la ligne :
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 HRESULT hr; IXMLDOMDocument2Ptr l_pXMLDOM; IXMLDOMSchemaCollectionPtr l_pSchemaCache; IXMLDOMDocument2Ptr l_pXSDDoc = NULL; IXMLDOMParseErrorPtr l_pError = NULL; CoInitialize(NULL); // Document XML hr = l_pXMLDOM.CreateInstance(__uuidof(MSXML2::DOMDocument)); if (FAILED(hr)) { return ERREUR; } else { // Nothing TODO } l_pXMLDOM->async = VARIANT_FALSE; l_pXMLDOM->validateOnParse = VARIANT_FALSE; l_pXMLDOM->load(m_strConfigurationFilePath.GetBuffer(m_strConfigurationFilePath.GetLength())); // Document XSD hr = l_pXSDDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)); if (FAILED(hr)) { return ERREUR; } else { // Nothing TODO } l_pXSDDoc->async = VARIANT_FALSE; l_pXSDDoc->validateOnParse = VARIANT_FALSE; l_pXSDDoc->load("Conf_Campain.xsd"); // Schema cache hr = l_pSchemaCache.CreateInstance(__uuidof(XMLSchemaCache)); if (FAILED(hr)) { return ERREUR; } else { // Nothing TODO } l_pSchemaCache->add("urn:books",l_pXSDDoc.GetInterfacePtr()); l_pXMLDOM->schemas = l_pSchemaCache.GetInterfacePtr(); l_pError = l_pXMLDOM->validate(); if (l_pError->errorCode != 0) { // Erreur }
l_pSchemaCache->add("urn:books",l_pXSDDoc.GetInterfacePtr());
l'application crash.
Partager