Question

Je construis un XmlDocument sur le voler en .NET avec un document XML. Je le transforme ensuite avec le Transform () méthode d'une XslCompiledTransform .

La méthode Transform () a levé une exception car un caractère non valide pour le codage a été trouvé dans le flux. Lorsque je copie / colle la chaîne à l'aide de TextVisualizer dans Visual Studio dans Altova XmlSpy , il ne trouve pas de problème d'encodage.

J'ai essayé d'ajouter un en-tête UTF-16 au document pour le rendre au format UTF-16 et l'appel de Transform à partir du texte résultant l'a amené à se plaindre d'une nomenclature. Vous trouverez ci-dessous une version simplifiée du code que j'ai utilisé.

            XmlDocument document = new XmlDocument();
            XmlDeclaration decl = document.CreateXmlDeclaration("1.0", "UTF-16", null);
            document.AppendChild(decl);

            XmlNode root = document.CreateNode(XmlNodeType.Element, "RootNode", "");
            XmlNode nodeOne = document.CreateNode(XmlNodeType.Element, "FirstChild", null);
            XmlNode nodeTwp = doc.CreateNode(XmlNodeType.Element, "Second Child", null);

            root.AppendChild(nodeOne);
            root.AppendChild(nodeTwo);
            document.AppendChild(root);

Ce que j'écris par conséquent sur une chaîne comme celle-ci:

        StringBuilder sbXml = new StringBuilder();
        using (XmlWriter wtr = XmlWriter.Create(sbXml))
        {
            xml.WriteTo(wtr);
            // More code that calls sbXml.ToString());
        }

Que dois-je faire pour ajouter la nomenclature ou pour que XslCompiledTransform.Transform ne se soucie pas du nom de son enfant?

Était-ce utile?

La solution

Vous n'avez pas besoin d'ajouter manuellement la déclaration xml.

Ce code ajoutera la nomenclature et la déclaration à la sortie.

XmlDocument document = new XmlDocument(); 
// XmlDeclaration decl = document.CreateXmlDeclaration("1.0", "UTF-16", null); 
// document.AppendChild(decl); 
XmlNode root = document.CreateNode(XmlNodeType.Element, "RootNode", ""); 
XmlNode nodeOne = document.CreateNode(XmlNodeType.Element, "FirstChild", null);
XmlNode nodeTwo = document.CreateNode(XmlNodeType.Element, "SecondChild", null); 
root.AppendChild(nodeOne); 
root.AppendChild(nodeTwo); 
document.AppendChild(root);

using(MemoryStream ms = new MemoryStream())
{
    StreamWriter sw = new StreamWriter(ms, Encoding.Unicode);
    document.Save(sw);
    Console.Write(System.Text.Encoding.Unicode.GetString(ms.ToArray()));
}

Si vous avez besoin de la sortie sous forme d'octet [], vous pouvez utiliser la sortie de ms.ToArray (). Sinon, vous pouvez utiliser le codage System.Text.Encoding approprié pour traduire l'octet [] en une variété de codages.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top