![](/img/trans.png)
[英]Easy way to convert a Dictionary<string, string> to xml and vice versa
[英]Convert dataset to xml string with nested repeated xml vice versa
我正在嘗試將具有2個數據表的數據集轉換為具有嵌套重復xml的xml字符串,如以下示例所示。
有什么建議嗎?
例:
<Items>
<Code>A001</Code>
<Qty>3</Qty>
<SerialNoList>
<SerialNo>S01</SerialNo>
<SerialNo>S02</SerialNo>
<SerialNo>S03</SerialNo>
</SerialNoList>
</Items>
我曾嘗試使用DataRelation將數據集轉換為xml,但只能獲得以下格式。
<Items>
<Code>A001</Code>
<Qty>3</Qty>
<SerialNoList>
<SerialNo>S01</SerialNo>
</SerialNoList>
<SerialNoList>
<SerialNo>S02</SerialNo>
</SerialNoList>
<SerialNoList>
<SerialNo>S03</SerialNo>
</SerialNoList>
</Items>
碼:
data.Tables[0].TableName = "Items";
data.Tables[1].TableName = "SerialNoList";
DataRelation dataRelation = data.Relations.Add("SerialNo",
data.Tables[0].Columns["Code"], data.Tables[1].Columns["Code"]);
dataRelation.Nested = true;
data.Tables[1].Columns["Code"].ColumnMapping = MappingType.Hidden;
string xmlString = data.GetXml();
資料:
1st DataTable (Items)
Code Qty
A001 3
2nd DataTable (SerialNoList)
Code SerialNo
A001 S01
A001 S02
A001 S03
嘗試使用Xml Linq進行以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Xml;
using System.Xml.Linq;
using System.Data;
namespace ConsoleApplication106
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
DataSet ds = new DataSet("Code_Serial_No");
DataTable dtCode = new DataTable("Code");
ds.Tables.Add(dtCode);
dtCode.Columns.Add("Code", typeof(string));
dtCode.Columns.Add("Qty", typeof(int));
dtCode.Rows.Add(new object[] { "A001", 3});
DataTable dtSerialNo = new DataTable("Serial_No");
ds.Tables.Add(dtSerialNo);
dtSerialNo.Columns.Add("Code", typeof(string));
dtSerialNo.Columns.Add("SerialNo", typeof(string));
dtSerialNo.Rows.Add(new object[] { "A001", "S01" });
dtSerialNo.Rows.Add(new object[] { "A001", "S02" });
dtSerialNo.Rows.Add(new object[] { "A001", "S03" });
string xml = "<Items></Items>";
XDocument doc = XDocument.Parse(xml);
XElement items = doc.Root;
items.Add(new XElement("Code", ds.Tables["Code"].Rows[0]["Code"]));
items.Add(new XElement("Qty", ds.Tables["Code"].Rows[0]["Qty"]));
XElement list = new XElement("SerialNoList");
items.Add(list);
foreach (DataRow row in ds.Tables["Serial_No"].AsEnumerable())
{
list.Add(new XElement("SerialNo", row.Field<string>("SerialNo")));
}
doc.Save(FILENAME);
}
}
}
對於那些需要處理多個項目的人
//dataSet is filled with data
string xml = "";
foreach (DataRow dr in dataSet.Tables["Items"].Rows)
{
XDocument doc = XDocument.Parse("<Detail></Detail>");
XElement items = doc.Root;
items.Add(new XElement("Code", dr["Code"]));
items.Add(new XElement("Qty", dr["Qty"]));
XElement list = new XElement("SerialNoList");
items.Add(list);
foreach (DataRow row in data.Tables["SerialNoList"].Select("Code = '" + dr["Code"] + "'"))
{
list.Add(new XElement("SerialNo", row["SerialNo"]));
}
xml += doc.ToString();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.