c# - 将数据集转换为带有嵌套重复 xml 的 xml 字符串,反之亦然
问题描述
我正在尝试将具有 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
解决方案
对于那些需要处理多个项目的人
//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();
}
推荐阅读
- sql - SQL query to combine column data from multiple columns
- typescript - 基于动态(映射/条件)类型获取类型完成
- reference - CString::new().unwrap().as_ptr() 给出空 *const c_char
- c++ - 将 MFC Cimage 初始化为纯色
- c# - 更改精灵纹理像素会导致巨大的灰色正方形
- sitecore - 如何在 Sitecore Glass.Mapper 中映射 DropList
- ruby-on-rails - ActiveRecord 连接查询
- android - GooglePlay Console:App 还没有任何应用内产品。
- javascript - 函数不做任何事情
- django - 来自 RESTful API 的 Django 流式 HTTP 响应