2010-07-27 13 views
1

Je transformais mon fichier XML à un autre fichier XML en utilisant les classes de XslCompiledTransform disponibles dans le .NET Framework 3.5XSL Transformation par le code ne donne pas lieu à la même sortie que la transformation XSL fait à travers un outil

Voici mon code.

private static void transformUtil(string sXmlPath, string sXslPath, string outputFileName) 
    { 
     try 
     { 

      XPathDocument myXPathDoc = new XPathDocument(sXmlPath); 
      XslCompiledTransform myXslTrans = new XslCompiledTransform(); 
      //load the Xsl 
      myXslTrans.Load(sXslPath); 
      //create the output stream 
      XmlTextWriter myWriter = new XmlTextWriter(outputFileName, null); 
      //do the actual transform of Xml 
      myXslTrans.Transform(myXPathDoc, null, myWriter); 
      myWriter.Close(); 
     } 
     catch (Exception e) 
     { 

      EventLogger eventLog; 
      eventLog = new EventLogger("transformUtil", e.ToString()); 
     } 

    } 
} 

Le code fonctionne, mais le fichier de sortie n'a pas la déclaration XML dans l'en-tête.

**<?xml version="1.0" encoding="utf-8"?>** 

Je n'arrive pas à comprendre cela. Lorsque j'utilise le même fichier XSL pour transformer le XML, à l'aide d'un outil comme notepad ++ ou Visual Studio, la transformation contient la déclaration XML dans l'en-tête. XslCompiledTransform est-il responsable de tronquer cette déclaration? Je suis perplexe.

Toute personne autre face des problèmes similaires?

Mon-tête du fichier XSL ressemble à ceci.

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> 
<xsl:template match="/"> 
+0

Pour une raison quelconque le fichier XSL est tronqué se. abhi

Répondre

1

L'éditeur XML utilisé n'a aucun paramètre associé.

changement

//create the output stream 
XmlTextWriter myWriter = new XmlTextWriter(outputFileName, null); 

à

XmlWriterSettings settings = 
    new XmlWriterSettings 
    { 
     OmitXmlDeclaration = false 
    }; 
XmlWriter myWriter = XmlWriter.Create(outputFileName, settings); 

Sinon, vous pouvez faire moins de configurer la transform:

private static void transformUtil(string sXmlPath, string sXslPath, 
            string outputFileName) 
{ 
    try 
    { 
     XslCompiledTransform xsl = new XslCompiledTransform(); 

     // Load the XSL 
     xsl.Load(sXslPath); 

     // Transform the XML document 
     xsl.Transform(sXmlPath, outputFileName); 
    } 
    catch (Exception e) 
    { 
     // Handle exception 
    } 

} 

Ceci devrait également respecter les instructions xsl:output du fichier XSLT lui-même, en particulier l'attribut omit-xml-declaration, pour lequel la valeur par défaut est "non" si elle n'est pas spécifiée.