Domanda

Sto creando un XmlDocument sul volare in .NET con un documento XML. Poi lo trasformo con Transform () metodo di un XslCompiledTransform .

Il metodo Transform () ha generato un'eccezione perché nel flusso è stato trovato un carattere non valido per la codifica. Quando copio / incollo la stringa con l'aiuto di TextVisualizer in Visual Studio in Altova XmlSpy , non trova un problema di codifica.

Ho provato ad aggiungere un'intestazione UTF-16 al documento per renderlo renderizzato come UTF-16 e chiamare Transform dal testo risultante ha portato a lamentarsi di una DBA. Di seguito è una versione semplificata del codice che ho usato.

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

Che di conseguenza scrivo su una stringa in questo modo:

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

Cosa devo fare per aggiungere la distinta componenti o per far sì che XslCompiledTransform.Transform non si preoccupi della distinta?

È stato utile?

Soluzione

Non è necessario aggiungere manualmente la dichiarazione xml.

Questo codice aggiungerà la distinta base e la dichiarazione all'output.

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

Se è necessario l'output come byte [], è possibile utilizzare l'output di ms.ToArray (). Altrimenti puoi usare la codifica System.Text.Encoding appropriata per tradurre il byte [] in una varietà di codifiche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top