Отображение XML в браузере с использованием данных из обработчика DataTable + ASP.Net - PullRequest
0 голосов
/ 29 сентября 2018

Мне нужно отобразить XML в браузере по следующим критериям:

  1. Это должно быть через обработчик для ASP.Net
  2. Данные поступают из базы данных напрямую, которая хранится в DataTable.
  3. Используя эту таблицу данных, мне нужно напрямую отобразить XML в браузере.

Что я сделал:

This code is written in ProcessRequest method where is final method is called. GetFeedData is where my SQL query is and returning table. The output for the table is also proper.

Или вы можете найти:

private void BuildAYSONationalFeed(HttpContext context, string data)
{
    using (XmlTextWriter writer = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8))
    {
        DataTable dataTable = GetFeedData();

        MemoryStream str = new MemoryStream();
        dataTable.WriteXml(str, true);
        str.Seek(0, SeekOrigin.Begin);
        StreamReader sr = new StreamReader(str);
        string xmlstr;
        xmlstr = sr.ReadToEnd();

        context.Response.Clear();
        context.Response.Buffer = true;
        context.Response.Charset = "";
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        context.Response.ContentType = "application/xml";
        context.Response.Write("<?xml version='1.0' encoding='UTF - 8'?>< bookstore >< book >< title > Everyday Italian </ title >< author > Giada De Laurentiis </ author >< year > 2005 </ year >< price > 30.00 </ price ></ book ></ bookstore > ");
        context.Response.Flush();
        context.Response.End();
    }
}

Теперь, в переменной xmlstr , я получил такой XML-код: I have minimised maximum nodes because of data privacy, but this is what I get in variable.

Теперь, когда, наконец, ответ написан, отображается как обычный HTLM без какого-либо форматирования.

См. Здесь: Am I missing something? I tried to paste the same XML I get in xmlstr valiable to notepad and loaded it browser. It appears properly. To my best guess, I'm not able to get the proper data to stream.

Пожалуйста, дайте мне знатьесли кто-то может помочь здесь с тем же.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Я получил решение, заполнив DataTable до DataSet и использовав встроенную функцию GetXML() из DataSet

См. Фрагмент ниже:

private void BuildAYSONationalFeed(HttpContext context, DataTable feedDataTable)
    {
        DataSet dataSet = new DataSet("Portals");
        dataSet.Tables.Add(feedDataTable);

        context.Response.Clear();
        context.Response.ContentEncoding = Encoding.UTF8;
        context.Response.ContentType = "text/xml";
        context.Response.Write(dataSet.GetXml());
        context.Response.Flush();
        context.Response.End();
    }

Это сработало.

Итак, метод GetXML() в основном загружает данные, хранящиеся в табличном формате в DataSet, в XML.Я просто отобразил ответ XML для браузера.

0 голосов
/ 29 сентября 2018

Я думаю, что вы ищете это

using (MemoryStream ms = new MemoryStream())
{
    dataTable.WriteXml(ms, true);
    ms.Seek(0, SeekOrigin.Begin);

    using (StreamReader sr = new StreamReader(ms))
    {
        string xmlstr = sr.ReadToEnd();

        //display unaltered xml in multiline textbox (= textarea in html)
        TextBox1.Text = xmlstr;

        //or htmlencode the xml for displaying it in html
        Label1.Text = WebUtility.HtmlEncode(xmlstr);

        //or if you want to display the xml somewhat nicely you have to do some replacing
        Label2.Text = formatXML(xmlstr);
    }
}

Вспомогательный метод для форматирования XML для отображения его в HTML

string formatXML(string xmlstr)
{
    if (string.IsNullOrEmpty(xmlstr))
    {
        return xmlstr;
    }

    //html encode the xml
    string formattedXml = WebUtility.HtmlEncode(xmlstr);

    //replace the line breaks with html <br>
    formattedXml = formattedXml.Replace(Environment.NewLine, "<br>");

    //indend the xml bij replacing spaces with no break space
    formattedXml = formattedXml.Replace("  ", "&nbsp;&nbsp;");

    return formattedXml;
} 
...