c# - 使用 ASP.NET MVC 形式的数据生成 xml 文件

标签 c# javascript jquery xml asp.net-mvc

我之前有一个表格,其中输入了有关 2 个人的关系标题和名字、姓氏的信息。输入信息并单击提交后,将生成一个 xml,如下所示:

<?xml version="1.0" encoding="utf-16"?>
<Data>
  <RelationData>
    <Relation Title="Friends">
      <Persons>
        <Person FirstName="Tom" LastName="B" />
        <Person FirstName="Jerry" LastName="C" />
      </Persons>
    </Relation>
  </RelationData>
</Data>

模型 - FormModel.cs

public class Relation
{
    public string Title { get; set; }
    public string Person1FirstName { get; set; }
    public string Person1LastName { get; set; }
    public string Person2FirstName { get; set; }
    public string Person2LastName { get; set; }
}

XmlModel.cs

public class XmlModel
{
    [XmlRoot("Data")]
    public class Data
    {
        [XmlElement("RelationData")]
        public RelationData RelationData { get; set; }
    }

    [SerializableAttribute()]
    public class RelationData
    {
        [XmlElement("Relation")]
        public Relation Relation { get; set; }
    }

[SerializableAttribute()]
    public class Relation
    {
        [XmlElementAttribute()]
        public Persons Persons { get; set; }

        [XmlAttributeAttribute()]
        public string Title { get; set; }
    }

[SerializableAttribute()]
    public class Persons
    {
        [XmlElementAttribute("Person")]
        public Person[] Person { get; set; }
    }

[SerializableAttribute()]
    public class Person
    {
        [XmlAttributeAttribute()]
        public string FirstName { get; set; }

        [XmlAttributeAttribute()]
        public string LastName { get; set; }
    }
}

View.cshtml 被强类型化为 FormModel 中的 Relation 类。它包含文本框和一个调用 Controller 中的 CreateData 操作的提交按钮。

<div class="form-horizontal">
    @Html.ValidationSummary(true)
    <div class="form-group">
        <input id="CreateData" type="submit" class="btn btn-primary" value="Create Data File" />
    </div>
</div>

Controller.cs - 读取传入的数据并创建使用辅助类 XmlResult 序列化的 XmlModel 对象。

[HttpPost]
public ActionResult CreateData(Relation rData)
{

    var xmlModelData = new XmlModel();

    // Create elements in XmlModel object using values in rData
    ...

    return new XmlResult<XmlModel>()
    {
        Data = xmlModelData
    };
}

辅助类

public class XmlResult<T> : ActionResult
{
    public T Data { private get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.ContentType = "text/xml";
        context.HttpContext.Response.ContentEncoding = Encoding.UTF8;

        var filename = DateTime.Now.ToString("mmddyyyyhhss") + ".xml";
        context.HttpContext.Response.AddHeader("content-disposition", "attachment; filename=" + filename);

        using(var writer = new StringWriter())
        {
            XmlSerializer xs = new XmlSerializer(typeof(T));
            xs.Serialize(writer, Data);
            context.HttpContext.Response.Write(writer);
        }
    }
}

因此,这会在浏览器上提供一个对话框,提供保存 xml 或打开它的选项。

现在我们需要在表单上输入更多内容,并且需要根据这些输入在同一个 xml 文件中生成一些更复杂的 xml 数据。

xml格式比较复杂,但会是之前xml中的新数据,如:

<?xml version="1.0" encoding="utf-16"?>
<Data>
  <RelationData>
    <Relation Title="Friends">
      <Persons>
        <Person FirstName="Tom" LastName="B" />
        <Person FirstName="Jerry" LastName="C" />
      </Persons>
    </Relation>
    <Relation Title="Friends">
      <Persons>
        <Person FirstName="Hello" LastName="AD" />
        <Person FirstName="World" LastName="BC" />
      </Persons>
    </Relation>
    ...
  </RelationData>
  <ComplexData>
   ...
  </ComplexData>
</Data>

如您所见,该表单可以提供多个 Relation 项以及一些 ComplexData。我不想为这个 ComplexData 结构创建类,所以我可能想要一些方法来直接编写 xml 而不是序列化对象。将 View 绑定(bind)到关系模型现在也没有意义。

那么我该怎么做才能在浏览器中生成 xml 文件呢?在当前的解决方案中,它正在执行服务器发布,但我愿意将其更改为完全在客户端工作。不确定这是否可以使用 jquery/javascript 完成?

最佳答案

您问是否可以在客户端创建 100% 的 XML?是的。您不能将其下载为文件(出于安全原因),但您可以将其放在文本区域中。

您只需在客户端连接一个字符串即可生成 xml。

这里有一篇文章展示了如何仅在客户端使用不同的 JavaScript 技术来处理 XML: Generate XML document in-memory with JavaScript

查询: How to parse XML using jQuery?

啊啊啊 这里有一些允许在客户端下载的技巧,其中一些不需要服务器端代码: Using HTML5/Javascript to generate and save a file

关于c# - 使用 ASP.NET MVC 形式的数据生成 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20365143/

相关文章:

c# - 使用来自外部文件的数据进行 xUnit 测试

c# - 处理 charge.refund webhook 时 Stripe.Net 发票属性为 NULL

javascript - 如何过滤掉除了与 JavaScript 中特定模式匹配的字符之外的非数字字符?

javascript - 从 JavaScript 中的文本文件获取值

javascript - 如何重新绘制附加在 svg 中但不显示的圆圈?

Javascript/Jquery onclick 函数凝结

c# - WPF元素主机每秒崩溃一次

c# - 带条件间距的 string.format 效率

jquery - 为 JqPlot 条形图构建 JSON

javascript - 如何将数据从一个html页面传递到另一个?