Frage

Ich baue eine XmlDocument auf die fliegen in .NET mit einem xML-Dokument. Ich verwandle dann, dass mit dem Transform () Methode eines XslCompiledTransform .

Die Transform () -Methode hat eine Ausnahme, weil ein ungültiges Zeichen für die Codierung im Stream gefunden wurde. Wenn die E / kopieren Sie die Zeichenfolge mit Hilfe des TextVisualizer einfügen in Visual Studio in Altova XMLSpy , es keine Codierung Problem.

habe ich versucht, in das Dokument eines UTF-16-Header hinzugefügt, um es als UTF-16 zu machen zu machen und aus dem resultierenden Text Trans calling führte dazu, über eine BOM beschweren. Im Folgenden finden Sie eine vereinfachte Version des Codes I verwendet wird.

            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);

Was ich damit in einen String schreibe etwa so:

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

Was muss ich tun, um die Stückliste oder erhalten XslCompiledTransform.Transform hinzufügen nicht über die bom zu kümmern?

War es hilfreich?

Lösung

Sie müssen nicht manuell, um die XML-Deklaration hinzuzufügen.

Dieser Code wird die Stückliste und die Deklaration mit dem Ausgang hinzuzufügen.

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()));
}

Wenn Sie die Ausgabe als byte [], dann können Sie die Ausgabe von ms.ToArray () verwenden. Ansonsten können Sie die entsprechende System.Text.Encoding Codierung verwenden, um die byte [] in eine Vielzahl von Kodierungen zu übersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top