Bon voilà mon bout de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
   typedef MSXML2::IMXWriterPtr XMLWriterPtr;
   XMLWriterPtr m_Writer;
   CoCreateInstance (CLSID_MXXMLWriter, NULL, CLSCTX_INPROC_SERVER, IID_IMXWriter, (LPVOID FAR*)&m_Writer);
   if (m_Writer) {
      m_Writer->put_standalone(0);
      m_Writer->put_encoding(_bstr_t("UTF-8"));
      VARIANT vvariant;
      V_BYREF(&vvariant) = docxml.m_DocumentPtr;
      m_Writer->put_output(vvariant);
      m_Writer->flush();
   }
 
   docxml.WriteToFile ("D:\\xmlwrote.xml");
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
docxml.m_DocumentPtr
est de type :
Normalement, ce code est censé me créer un document XML avec une identataion correcte (cad avec les whitespace).
MAIS, lorsque je crée le document (dernière ligne de code) et que je regarde le fichier produit ; pas de bol, il a été créé sans l'aide de mon Writer.

Voilà le code de la méthode WriteToFile :
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
 
BOOL XMLNS::XMLDocument::WriteToFile (const CString& inFileName)
{
   if (m_DocumentPtr != NULL) {
      HRESULT hr = m_DocumentPtr->save(_variant_t(inFileName));
      if (!hr) {
         return TRUE;
      }
      else {
         return FALSE;
      }
   }
   else {
      return FALSE;
   }
}
La question que je me pose, est-ce que la méthode save de DOMDocument (mal documentée sur msdn) ne prend pas en compte mon writer XML ?
Est-ce que le fait de passer un VARIANT BYREF pose problème ?
Ou autre chose ?
Merci si quelqu'un a une réponse, j'ai vu sur msdn, sur des forums en anglais, que dalle !

PS : je ne veux pas d'une solution en passant par du xslt car ça ne serait pas optimisé.

Merci beaucoup