簡體   English   中英

在ASP.NET MVC中編寫XML文件?

[英]Writing an XML file in ASP.NET MVC?

我對XML完全沒有經驗,更不用說生成XML文件了,我完全陷入了僵局。

我找不到與此相關的任何MVC相關線程,只有WPF和控制台。

認為我有一個可以正常工作的代碼,可以根據MSDN的指南來判斷文件,但是我不知道如何在MVC中從那里繼續前進,因為這是為控制台而進行的。

這是在存儲庫中:

public void SaveFile(string fileName)
    {
        Checker checker = new Checker();
        XMLWriter xmlWriter = new XMLWriter();

        string userid = xmlWriter.UserId.ToString();
        string date = xmlWriter.Date;
        int hours = xmlWriter.Hours;
        string role = xmlWriter.Role;

        userid = checker.User.UserName;
        date = checker.Date.ToString();
        hours = int.Parse(checker.Total.ToString());
        role = checker.User.Roles.ToString();

        XDocument doc = new XDocument(
            new XElement("Tidrans",
                new XElement("tidkod", role),
                new XElement("datum", date),
                new XElement("timmar", hours)
            )
        );
        doc.Save("Test.xml");

    }

這是在模型中:

public class XMLWriter
{
    [Key]
    public int Id { get; set; }

    [Display(Name = "anstid")]
    public int UserId { get; set; }

    [Display(Name = "tidkod")]
    public string Role { get; set; }

    [Display(Name = "datum")]
    public string Date { get; set; }

    [Display(Name = "timmar")]
    public int Hours { get; set; }

    [Display(Name = "frånvarande")]
    public float Absent { get; set; }
}

我不知道從那里去如何使用控制器? 需要控制器嗎? 如何下載?

我想您要下載xml。 如果是這種情況,請嘗試以下代碼:

    public FileStreamResult GenerateXML()
    {
        MemoryStream ms = new MemoryStream();
        XmlWriterSettings xws = new XmlWriterSettings();
        xws.OmitXmlDeclaration = true;
        xws.Indent = true;

        using (XmlWriter xw = XmlWriter.Create(ms, xws))
        {
            XDocument doc = new XDocument(
             new XElement("Tidrans",
              new XElement("tidkod", "role"),
              new XElement("datum", "date"),
              new XElement("timmar", "hours")
             )
            );
            doc.WriteTo(xw);
        }
        ms.Position = 0;
        return File(ms, "text/xml", "Sample.xml");
    }

以下是輸出:

<Tidrans>
  <tidkod>role</tidkod>
  <datum>date</datum>
  <timmar>hours</timmar>
</Tidrans>

您需要確定如何處理此問題。 給定您已經擁有的方法,您所要做的就是“運行”它。 可能是執行此操作的控制器操作,控制台應用程序,Azure功能等。可能性無限。 運行后,您可以直接通過IIS提供XML文件。 您甚至不需要MVC,因為那時它只是一個靜態文件。

但是,如果您想即時生成它,則可以在其中執行控制器動作。 然后,您可以在該操作中調用此方法,然后直接返回創建的文件:

return File("Test.xml", "application/xml");

或者,您可以讓該方法實際上是操作本身的內容,然后直接返回XML而無需保存到文件系統中:

return Content(doc.ToString(), "application/xml");

大概這是返回XML內容作為響應的最簡單但最有效的方法:

public ActionResult XmlData()
{
    var doc = new XDocument(
        new XElement("Root",
            new XElement("Node1", 1),
            new XElement("Node2", 2)
        )
    );

    Response.ContentType = "text/xml";

    doc.Save(Response.Output);

    return new EmptyResult();
}

如果您的XML文檔足夠大,則可以通過XDocument並直接寫入響應流來簡化輸出。

[HttpPost]
public ActionResult Upisi(string reg, string datum, string startPos, string krajPos, string predjKm) {
    // upisivanje u fajl
    List<vozilo> vozila = TempData["vozila"] as List<vozilo>;
    List<voziloPodatak> ispis = new List<voziloPodatak>();

    string marka = "";
    string godina = "";
    int kilometri = 0;

    foreach (vozilo voz in vozila) {
        if (voz.Registracija == reg) {
            marka = voz.Model;
            godina = voz.Godiste;
        }
    }

    StreamWriter sw = new StreamWriter(Server.MapPath("~/App_Data/" + reg + ".txt"), true);       

    sw.WriteLine(datum + "|" + startPos + "|" + krajPos + "|" + predjKm);

    sw.Close();

    foreach (vozilo voz in vozila) {
        voziloPodatak podatak = new voziloPodatak();
        bool postoji = System.IO.File.Exists(Server.MapPath("~/App_Data/" + voz.Registracija + ".txt"));
        if (postoji)
        {
            podatak.Registracija = voz.Registracija;
            podatak.Marka = voz.Model;
            podatak.GodinaProizvodnje = voz.Godiste;

                using (StreamReader sr = new StreamReader(Server.MapPath("~/App_Data/" + voz.Registracija + ".txt")))
                {

                    string line;
                    while ((line = sr.ReadLine()) != null)
                    {
                        string[] linija = line.Split('|');
                        int predjenoKmFajl = Convert.ToInt32(linija[3]);
                        kilometri += predjenoKmFajl;
                    }

                }
                podatak.PredjenoKilometara = kilometri.ToString();                

            ispis.Add(podatak);
        }
    }       
    return View(ispis);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM