Domanda

Sto creando un ASHX che restituisce XML tuttavia si aspetta un percorso quando faccio

XmlWriter writer = XmlWriter.Create(returnXML, settings)

Ma returnXML è solo una stringa vuota in questo momento (immagino che non funziona), ma ho bisogno di scrivere il codice XML per qualcosa che posso quindi inviare il testo di risposta. Ho provato XmlDocument ma mi ha dato un errore in attesa di una stringa. Che cosa mi manca qui?

È stato utile?

Soluzione

Se si vuole veramente scrivere nella memoria, passare un StringWriter o un StringBuilder in questo modo:

using System;
using System.Text;
using System.Xml;

public class Test
{
    static void Main()
    {
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;        
        StringBuilder builder = new StringBuilder();

        using (XmlWriter writer = XmlWriter.Create(builder, settings))
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("root");
            writer.WriteStartElement("element");
            writer.WriteString("content");
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndDocument();
        }
        Console.WriteLine(builder);
    }
}

Se si desidera scrivere direttamente alla risposta, tuttavia, si potrebbe passare HttpResponse.Output che è un TextWriter invece:

using (XmlWriter writer = XmlWriter.Create(Response.Output, settings))
{
    // Write into it here
}

Altri suggerimenti

Mancava qualcosa dalla mia parte: vampate di calore buffer della XmlWriter:

static void Main()
{
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;        
    StringBuilder builder = new StringBuilder();

    using (XmlWriter writer = XmlWriter.Create(builder, settings))
    {
        writer.WriteStartDocument();
        writer.WriteStartElement("root");
        writer.WriteStartElement("element");
        writer.WriteString("content");
        writer.WriteEndElement();
        writer.WriteEndElement();
        writer.WriteEndDocument();

        writer.Flush();

    }
    Console.WriteLine(builder);
}
    StringBuilder xml = new StringBuilder();
    TextWriter textWriter = new StringWriter(xml);
    XmlWriter xmlWriter = new XmlTextWriter(textWriter);

Quindi, utilizzare la xmlWriter per fare tutta la scrittura di XML, e che scrive direttamente al StringBuilder.

Edit: Grazie al commento di Jon Skeet:

    StringBuilder xml = new StringBuilder();
    XmlWriter xmlWriter = XmlWriter.Create(xml);

Il modo migliore per farlo è quello di scrivere direttamente nel flusso di output di risposta. Il suo un flusso che è built-in ad ASP.NET per consentire di scrivere tutto ciò che in uscita come un flusso, in questo caso è possibile scrivere XML ad esso.

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