Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC中编写XML文件?_C#_Asp.net_Xml_Asp.net Mvc - Fatal编程技术网

C# 在ASP.NET MVC中编写XML文件?

C# 在ASP.NET MVC中编写XML文件?,c#,asp.net,xml,asp.net-mvc,C#,Asp.net,Xml,Asp.net Mvc,我完全没有XML方面的经验,更不用说生成XML文件了,我完全被卡住了 我找不到任何与MVC相关的线程,只有WPF和控制台 我想我有一个工作代码来生成一个文件,但我不知道如何在MVC中继续,因为这是用于控制台的 这在存储库中: public void SaveFile(string fileName) { Checker checker = new Checker(); XMLWriter xmlWriter = new XMLWriter();

我完全没有XML方面的经验,更不用说生成XML文件了,我完全被卡住了

我找不到任何与MVC相关的线程,只有WPF和控制台

我想我有一个工作代码来生成一个文件,但我不知道如何在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; }
}
这在模型中:

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");
[HttpPost]
public ActionResult Upisi(字符串注册表、字符串数据、字符串起始点、字符串起始点、字符串起始点、字符串起始点){
//乌皮西万杰
将vozila=TempData[“vozila”]列为列表;
List ispis=新列表();
字符串marka=“”;
字符串godina=“”;
int-ri=0;
foreach(vozilo voz in vozila){
如果(voz.registicija==reg){
marka=voz.Model;
戈迪纳=沃兹·戈迪斯特;
}
}
StreamWriter sw=新的StreamWriter(Server.MapPath(“~/App\u Data/”+reg+“.txt”),true);
西南写入线(基准面+“|”+起始点+“|”+krajPos+“|”+predjKm);
sw.Close();
foreach(vozilo voz in vozila){
VOZILOPODATK podatak=新的VOZILOPODATK();
bool postoji=System.IO.File.Exists(Server.MapPath(“~/App_Data/”+voz.registicija+”.txt));
if(postoji)
{
podatak.registicija=voz.registicija;
Marka=voz.Model;
podatak.GodinaProizvodnje=voz.Godiste;
使用(StreamReader sr=newstreamreader(Server.MapPath(“~/App_Data/”+voz.registicija+”.txt)))
{
弦线;
而((line=sr.ReadLine())!=null)
{
string[]linija=line.Split(“|”);
int predjenoKmFajl=Convert.ToInt32(linija[3]);
公里数+=predjenoKmFajl;
}
}
podatak.PredjenoKilometara=kmori.ToString();
ispis.Add(podatak);
}
}       
返回视图(ispis);
}

这大概是返回XML内容作为响应的最简单但最有效的方法:

public ActionResult XmlData()
{
var doc=新XDocument(
新的XElement(“根”,
新XElement(“节点1”,1),
新XElement(“节点2”,2)
)
);
Response.ContentType=“text/xml”;
单据保存(响应输出);
返回新的EmptyResult();
}

如果您的XML文档足够大,您可以通过去掉
XDocument
并直接写入响应流来简化输出。

我认为您应该知道为什么要迁移到MVC而不是其他东西,这应该回答“我需要控制器吗”的问题,其余的应该跟进。。代码没有绑定到控制台应用程序,因此应该以相同的方式工作。最终,您可以拥有某种生成XML的助手类,但我看不到您在没有控制器的情况下使用MVC。。也许我错了,但试一试。这是我正在构建的一个web应用程序的一个功能。大部分工作已经完成,真正需要的是导出数据的方法(例如XML)。因此,我之所以要问我是否需要一个控制器是为了这个特定的功能。如果解决方案已经存在,你可以添加一个帮助器类并实例化或注入。。由您决定,您不需要一个控制器来生成或下载xml。我必须更改一些内容(将其移到控制器上以使
文件
正常工作,并使用方法将
返回
放在第一个
中),但现在我得到了。哦,我应该补充一下,为了确保它“有效”,我用测试字符串(注释掉整数)替换了
checkin
内容,只是为了确保有值。谢谢,它很有效!我不应该有太多的问题来获取数据。你没有打扰我,很抱歉打扰了你。我想很容易为每个用户获得一个
“tidtrans”
,就一个foreach?我不应该有任何问题,只是确保(不需要任何例子,你已经非常有帮助了)。再次感谢!您可以分别使用MVC的固有属性
Response.OutputStream
Response.OutputStream
来代替自己的
MemoryStream
XmlWriter
。请看下面我的帖子。我看不懂这段代码,因为它似乎是用波兰语或捷克语写的。请把它翻译成英语并加上解释。