2017-09-28 43 views
0

我完全沒有使用XML的經驗,更不用說生成XML文件了,而且我完全陷入困境。在ASP.NET MVC中編寫XML文件?

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

認爲我有一個工作代碼來生成一個文件由MSDN's guide判斷,但我不知道如何從那裏移動在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; } 
} 

我不知道如何從那裏,我怎麼使用控制器?我需要需要控制器嗎?我如何下載它?

+1

我想你應該知道爲什麼你移動到MVC,而不是別的東西,這應該回答這個問題:「我需要一個控制器」其餘應遵循..代碼沒有被綁定到控制檯應用程序,所以應該以同樣的方式工作。最終你可以有一些幫助器類來生成XML,但我看不到你使用MVC沒有控制器的工作..也許我錯了,但試試看。 – rmjoia

+0

這是我正在構建的Web應用程序的一項功能。它大部分已經完成了,真正需要的只是一種導出數據的方式(如XML)。所以我問我是否需要一個控制器的原因是爲了這個特殊功能。 – Will

+0

如果解決方案已經存在,您可以添加一個輔助類並實例化或注入..對您來說,您不需要控制器來生成或下載xml。 – rmjoia

回答

0

我想你想要下載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> 
+1

我不得不改變一些東西(把它移到控制器上以使'File'工作,並在第一個'using'方法中移動'return'),但是現在我得到[this error](https:// i。 imgur.com/7JOUiJ2.png)。哦,我應該補充說,爲了確保它「有效」,我用測試字符串(註釋掉整數)替換了checkin東西,只是爲了確保有值。 – Will

+0

@我將編輯答案。請嘗試一下,並抱歉打擾你。 – Arul

+0

謝謝你,它很棒!我不應該有太多的問題來獲取數據。你沒有打擾我,我很抱歉打擾你*。我想很容易爲每個用戶獲得一個「tidtrans」,只是一個foreach?我不應該有任何問題,只要確保(不需要任何示例,你已經非常有幫助)。再次感謝! – Will

1

你需要決定要如何處理這個問題。鑑於你已有的方法,你所需要做的就是「運行」它。它可能是一個控制器動作,控制檯應用程序,Azure功能等等。可能性是無限的。運行後,您可以直接通過IIS提供XML文件。你甚至不需要MVC,因爲它只是一個靜態文件。

但是,如果您想要即時生成它,那就是控制器操作將發揮作用的地方。然後,你既可以調用該操作此方法,並直接返回所創建的文件:

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

或者你也可以有一個方法,實際上是你的行動本身的內容,並直接不保存到文件系統返回的XML :

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