[英]Generate xml using LINQ to XML
假設我有一個如下所示的類,如何使用LINQ to XML創建如下所示的xml?
public class Order
{
public string OrderNo {get; set;}
public string ItemId {get; set;}
public string ItemDesc {get; set;}
public int Qty {get; set;}
}
<orders>
<orderid>
<orderno>1</orderno>
<itemid>W001</itemid>
<itemdesc>C# T-Shirst</itemdesc>
<quantity>2</quantity>
</orderid>
<orderid>
<orderno>2</orderno>
<itemid>W002</itemid>
<itemdesc>XML T-Shirt</itemdesc>
<quantity>1</quantity>
</orderid>
</orders>
雖然您可以使用XmlSerialization,但是在很多情況下使用LINQ to XML同樣容易,並且不會將類實現鎖定到單個序列化方案中。 這里有一些代碼來處理您的請求。
var xOrders = new XElement("orders",
from o in Orders
select new XElement("orderid",
new XElement("orderno", order.OrderNo),
new XElement("itemid", order.ItemId),
new XElement("itemdesc", order.ItemDesc),
new XElement("quantity", order.Qty)));
xOrders.Save(targetPath);
您不需要linq來生成此xml,您可以使用linq生成collection
並在xml文件中序列化集合。
在序列化之前,您應該在類中添加Serializable
屬性:
[Serialize]
public class Order
{
public string OrderNo {get; set;}
public string ItemId {get; set;}
public string ItemDesc {get; set;}
public int Qty {get; set;}
}
看看這里如何自定義序列化(使用屬性): http : //msdn.microsoft.com/en-us/library/58a18dwa (v=vs.80) .aspx
創建這樣的方法來序列化:
public statc void SerializeOrders(Order[] orders, string path)
{
XmlSerializer parse = new XmlSerializer(typeof(Order[]));
using (var writer = new StreamWriter(path))
{
parse.Serialize(writer, orders);
writer.Close();
}
}
並反序列化:
public statc Order[] Deserialize(string path)
{
XmlSerializer ser = new XmlSerializer(typeof(Order[]));
Order[] result;
using (XmlReader reader = XmlReader.Create(path))
{
result = (Order[]) ser.Deserialize(reader);
}
return result;
}
並使用它:
// get the collection
var orders = (from o in Queryable<Order>
where o.Something
select o).ToArray();
// serializing in xml
SerializeOrders(orders, "C:\\result.xml");
// deserializing the xml
var serializedOrders = Deserialize("C:\\result.xml");
你必須尊重層次結構。
序列化這個XML,我們會有這樣的事情:
<Order>
<OrderNo></OrderNo>
<ItemId></ItemId>
...
<Order>
我想在這種情況下,您必須自己編寫對象並使用XmlDocument,XElement或StringBuilder生成XML。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.