[XML / XLS] C++ : Soucis de feuille XSL !

C++ : Soucis de feuille XSL ! [XML / XLS] - XML/XSL - Programmation

Marsh Posté le 18-05-2004 à 10:10:13    

Bonjour,
 
Je cherche à appliquer une feuille de style XSL à un arbre XML, mais cette action provoque une erreur.
L'affichage de l'abre XML sous IE 5.1 marche sans soucis tant que je n'applique pas la feuille XSL.
 
Une fois que je l'applique, l'erreur suivante se produit :
 

Code :
  1. The XML page cannot be displayed
  2. Cannot view XML input using style sheet. Please correct the error and then click the Refresh button, or try again later.
  3. --------------------------------------------------------------------------------
  4. XML document must have a top level element. Error processing resource


 
Voici le code :
 

Code :
  1. ...
  2. //Creation de l'arbre XML (enregistrement du Recordset)
  3. MSXML::IXMLDOMDocumentPtr pXMLDOMDoc;
  4. pXMLDOMDoc.CreateInstance(__uuidof(MSXML::DOMDocument));
  5. pAdoRecordset->Save(pXMLDOMDoc.GetInterfacePtr(), ADODB::adPersistXML);
  6. //Création de ma feuille de style xls
  7. CString pXSLClause;
  8. pXSLClause = " <?xml version=\"1.0\"?>";
  9. pXSLClause = " <xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http:\//www.w3.org/TR/WD-xsl\">";
  10. pXSLClause = "  <xsl:template match=\"/\">";
  11. pXSLClause = "  </xsl:template>";
  12. pXSLClause = " </xsl:stylesheet> ";
  13. //On applique la feuille XLS
  14. pXMLDOMDoc->loadXML((_bstr_t)pXSLClause);
  15. //Sauvegarde sous un fichier de debug de l'arbre en mémoire
  16. pXMLDOMDoc->save("Debug-XML-OutPut.xml" );
  17. ...


 
Mon fichier en sortie fait 600Ko sans la feuille de style, puis 0ko quand je l'applique. Pourtant ma feuille XSL est la plus simple du monde ...
 
Pourriez vous m'aider ? :)
 
Merci !

Reply

Marsh Posté le 18-05-2004 à 10:10:13   

Reply

Marsh Posté le 18-05-2004 à 10:47:20    

help :(
 
+1

Reply

Marsh Posté le 18-05-2004 à 12:24:36    


hum, comment te dire ça avec des mots simples...
C'est vraiment ce code là que tu utilises ?
Alors on mettra ça sur le compte d'une erreur d'étourderie...
 
L'operateur = remplace le contenu de ta CString,
il faut utiliser += si tu veux ajouter...
 
la CString contient le résultat de la dernière affectation...
pXSLClause = " </xsl:stylesheet> ";  

Reply

Marsh Posté le 18-05-2004 à 12:51:32    

Merci !
 
J'ai effectivement corrigé ca ce matin !
Oui l'etourderie :)
 
Par contre je t'avouerais avoir de nouveaux soucis sur ce format XSL, d'autant plus que pour trouver l'erreur lorsqu'il y en a une, est assez ardue, car à l'inverse d'un compilateur, quand une ligne a une mauvaise syntaxe, le .xml contient 0 octet, et pour trouver l'erreur, bonjour bonjour ...
 
Auriez vous une technique ?
 
Je refile plancher sur la msdn !
 
Merci à toi !

Reply

Marsh Posté le 18-05-2004 à 13:20:44    

Voila mon arbre XML :
 

Code :
  1. -<z:row ID_FR="30" ID_FR_ER="557" NOM_FR="ABS">
  2.        <cmp ID_CMP="557" NATURE_ABS="O" EXTENSE="N"/>
  3.        <cmp ID_CMP="558" NATURE_ABS="O" EXTENSE="N"/>
  4. </z:row>


 
Je souhaiterais que cela me donne :

Code :
  1. -<NOUVEAU ID_FR="30">
  2.        <cmp ID_CMP="toto:557"/>
  3.        <cmp ID_CMP="toto:558"/>
  4. </NOUVEAU>


 
Et voici mon XSL qui ne marche pas
 

Code :
  1. <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'
  2. xmlns:rs='urn:schemas-microsoft-com:rowset'
  3. xmlns:z='#RowsetSchema'
  4. exclude-result-prefixes='rs z'>
  5. <xsl:output method='xml' encoding='UTF-8' omit-xml-declaration='yes'/>
  6. <xsl:template match='/'>
  7.  <xsl:for-each select='z:row'>
  8.   <NOUVEAU ID_FR="{@ID_DATA}">
  9.    <xsl:for-each select='cmp'>
  10.     <cmp ID_CMP="toto:{@CMP_DATA}"/>
  11.    </xsl:for-each>
  12.   </NOUVEAU>
  13.  </xsl:for-each>
  14. </xsl:template>
  15. </xsl:stylesheet>


 
J'avoue débuter ! (Cela doit se voir dans les potentielles erreurs de grammaire du langage)
 
Ca ne marche pas :(
Il me sort la meme erreur qu'auparavant! :(


Message édité par wishy le 18-05-2004 à 13:35:29
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed