Ajouter <?xml version=“1.0” ?> en haut d'un fichier xml après transformation xsl
J'ai réussi à transformer un simple fichier xml avec les données d'un autre fichier xml (modèle excel) à l'aide d'un modèle xsl, c'est ce que mon fichier xsl ressemble:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" standalone="yes"/>
<xsl:template match="/">
<xsl:processing-instruction name="mso-application">
<xsl:text>progid="Excel.Sheet"</xsl:text>
</xsl:processing-instruction>
...(stuff here)...
</xsl:template>
</xsl:stylesheet>
Le fichier xml résultant est écrit correctement, MAIS à l'exception de l', y compris
<?xml version="1.0"?>
en haut du fichier. Comment puis-je obtenir pour apparaître en haut?
Actuellement mon fichier xml résultant commence avec:
<?mso-application progid="Excel.Sheet"?>
...(rest of file)...
Mais ce que j'en ai besoin pour faire est:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
.(rest of file)...
Je suis en train de faire cette transformation par le biais d'un formulaire windows avec le code suivant:
XPathDocument myXPathDoc = new XPathDocument(xmlfile);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(xslfile);
XmlTextWriter myWriter = new XmlTextWriter(xmlexcelfile, null);
myWriter.Formatting = Formatting.Indented;
myWriter.Namespaces = true;
myXslTrans.Transform(myXPathDoc, null, myWriter);
myWriter.Close();
J'ai essayé de jouer avec les xsl:output standalone="yes/no"
, ainsi que omit-xml-declaration="no"
. J'ai aussi essayé (en C#) code de l'ajout de myWriter.WriteStartDocument();
avant de se transformer, mais qui n'a pas été autorisé. J'ai essayé de chercher en ligne pour cela et de revenir à la standalone="yes"
mais qui ne fonctionne pas. Est-il quelque chose qui me manque ici? Oh, et au cas où vous vous demandez pourquoi j'ai besoin d'avoir
<?xml version="1.0"?>
en haut du fichier, c'est parce que lors de l'ouverture du fichier xml avec excel, excel ne reconnaît pas correctement, mais si elle est comprise, excel s'ouvre correctement...
OriginalL'auteur oUJi | 2012-05-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire
ou quelque chose de semblable à ce à l'aide de
XmlWriterSettings
Modifier: Ajout de code. Précédent manquait quelques pièces
C'est de cette façon que je le fais, mais ce code est écrit spécifiquement pour créer une instance d'un
XmlDocument
. Je suis sûr que vous pouvez adapter à vos besoins.Je ne peux pas vraiment dire ce qui serait la cause. Cela fonctionne pour moi. Pensez-vous que vous pourriez utiliser une
XmlWriter
au lieu deXmlTextWriter
? Si vous le pouvez, puis je veux vous à cette msdn.microsoft.com/en-us/library/... (que vous avez probablement déjà vu)OHHHH JE SUIS TELLEMENT DÉSOLÉ. Veuillez noter que j'ai ajouté de façon erronée
writerSettings.OmitXmlDeclaration = true;
quand il doit êtrefalse
. Pouvez-vous essayer cela et laissez-moi savoir? Je vais corriger la réponse.Désolé de revenir vers vous si tard, ne pas avoir le temps de travailler sur elle jusqu'à maintenant, mais à l'aide de XmlWriter au lieu de XmlTextWriter a fait le tour! Merci pour l'aide!
-1: désolé, mais plusieurs mauvaises pratiques ici: 1) votre MemoryStream et XmlWriter besoin
using
blocs. 2)catch(Exception ex){throw;}
est un no-op: retirez le bloc try/catch entièrement.OriginalL'auteur MilkyWayJoe