Generieren der xml-Datei mit Daten in ASP.NET MVC-form
Hatte ich eine form früher nahm die Eingabe über das Verhältnis von Titel und Vorname, Nachname von 2 Personen. Nach der Eingabe der Informationen und die Schaltfläche zum Senden klickt, wird ein xml-bekam generiert, die sah aus wie:
<?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>
Modelle - 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; }
}
}
Den Blick.cshtml ist stark typisiert, um die Beziehung Klasse FormModel. Es enthält die Textfelder und einen submit-button fordert der CreateData action im controller.
<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 - Liest die übergebenen Daten aus und erstellt die XmlModel Objekt, das serialisiert wird mit Helfer-Klasse XmlResult.
[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
};
}
Helper-Klasse
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);
}
}
}
So gibt dies ein dialog über den browser geben Sie eine option zum speichern der xml-Code oder öffnen Sie es.
Nun wollen wir einige weitere Eingänge auf die form und basierend auf diesen Eingaben etwas komplexeren xml-Daten generiert werden, in der gleichen xml-Datei.
Xml-format ist Komplex, aber es werden neue Daten in den vorherigen xml wie:
<?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>
Wie Sie sehen können, kann das Formular bereitstellen mehrerer Relation Elemente sowie einige ComplexData. Ich don ' T wollen, erstellen Sie Klassen für diese ComplexData Struktur, so möchte ich wahrscheinlich einige Möglichkeit, direkt zu schreiben, die xml statt der Serialisierung der Objekte. Auch das binden der Ansicht Beziehung-Modell macht keinen Sinn jetzt.
Also, wie kann ich dies angehen, so dass ich bin immer noch in der Lage, zum generieren der xml-Datei im browser? In der aktuellen Lösung, es macht einen server zu senden, aber ich bin bereit, zu ändern, zu ganz funktioniert auf der client-Seite. Nicht sicher, ob dies mit jquery/javascript?
InformationsquelleAutor AloofC | 2013-12-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fragen Sie, wenn Sie können erstellen Sie die XML 100% auf der client-Seite? Ja. Sie können nicht laden Sie es als eine Datei (wegen der Sicherheit), aber Sie könnten es in einem text-Bereich.
Können Sie dafür, dass xml einfach durch das verketten einer Zeichenfolge auf der client-Seite.
Hier ist ein post, der zeigt, wie Sie mit XML arbeiten mit verschiedenen javascript-Techniken auf der client-Seite nur:
Generieren von XML-Dokumenten im Speicher mit JavaScript
Jquery:
Zum analysieren von XML-Daten mithilfe von jQuery?
uuuund
hier sind einige tricks für die Möglichkeit, downloads auf der client-Seite, von denen einige benötigen keine server-side-code:
Mit HTML5/Javascript zu generieren und speichern einer Datei
InformationsquelleAutor 0gyob0