C# 4.0 使用c将xml字符串转换为数据表#
我需要将以下xml字符串转换为datatable。请给我建议任何解决办法 XMLString:C# 4.0 使用c将xml字符串转换为数据表#,c#-4.0,c#-3.0,C# 4.0,C# 3.0,我需要将以下xml字符串转换为datatable。请给我建议任何解决办法 XMLString: 0 <Seat-Map> <Lower-Deck> <column id="1"> <row id="1"><seat number="1C" status="0" /> </row> <row id="2"><seat number="2C" status=
0
<Seat-Map>
<Lower-Deck>
<column id="1">
<row id="1"><seat number="1C" status="0" /> </row>
<row id="2"><seat number="2C" status="0" /> </row>
<row id="3"><seat number="3C" status="0" /> </row>
<row id="4"><seat number="4C" status="0" /> </row>
<row id="5"><seat number="5C" status="0" /> </row>
<row id="6"><seat number="6C" status="0" /> </row>
<row id="7"><seat number="7C" status="0" /> </row>
<row id="8"><seat number="8C" status="0" /> </row>
<row id="9"><seat number="9C" status="0" /> </row>
<row id="10"><seat number="10C" status="0" /> </row>
</column>
<column id="2">
<row id="1"><seat number="1B" status="0" /> </row>
<row id="2"><seat number="2B" status="0" /> </row>
<row id="3"><seat number="3B" status="0" /> </row>
<row id="4"><seat number="4B" status="0" /> </row>
<row id="5"><seat number="5B" status="0" /> </row>
<row id="6"><seat number="6B" status="0" /> </row>
<row id="7"><seat number="7B" status="0" /> </row>
<row id="8"><seat number="8B" status="0" /> </row>
<row id="9"><seat number="9B" status="0" /> </row>
<row id="10"><seat number="10B" status="0" /> </row>
</column>
<column id="3">
<row id="1"><seat number="#" status="blank"/> </row>
<row id="2"><seat number="#" status="blank"/> </row>
<row id="3"><seat number="#" status="blank"/> </row>
<row id="4"><seat number="#" status="blank"/> </row>
<row id="5"><seat number="#" status="blank"/> </row>
<row id="6"><seat number="#" status="blank"/> </row>
<row id="7"><seat number="#" status="blank"/> </row>
<row id="8"><seat number="#" status="blank"/> </row>
<row id="9"><seat number="#" status="blank"/> </row>
<row id="10"><seat number="#" status="blank"/> </row>
</column>
<column id="4">
<row id="1"><seat number="1A" status="0" /> </row>
<row id="2"><seat number="2A" status="0" /> </row>
<row id="3"><seat number="3A" status="0" /> </row>
<row id="4"><seat number="4A" status="0" /> </row>
<row id="5"><seat number="5A" status="0" /> </row>
<row id="6"><seat number="6A" status="0" /> </row>
<row id="7"><seat number="7A" status="0" /> </row>
<row id="8"><seat number="8A" status="0" /> </row>
<row id="9"><seat number="9A" status="0" /> </row>
<row id="10"><seat number="10A" status="0" /> </row>
</column>
</Lower-Deck>
</Seat-Map>
我得到的输出
errorCode | xml
-------------------------------------------------------------------------------------------
0 | <Seat-Map><Lower-Deck><column id="1"><row id="1">..............
| ....................</Lower-Deck></Seat-Map>
好的,我希望这有帮助。我这样做的方式是解析Xml并将其加载到DOM(这里我使用的是LinqToXml),然后尝试查找所有座位并将它们插入到DataTable的实例中
using System;
using System.Data;
using System.Linq;
using System.Xml.Linq;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string XmlData = @"<Seat-Map>
<Lower-Deck>
<column id=""1"">
<row id=""1""><seat number=""1C"" status=""0"" /> </row>
<row id=""2""><seat number=""2C"" status=""0"" /> </row>
<row id=""3""><seat number=""3C"" status=""0"" /> </row>
<row id=""4""><seat number=""4C"" status=""0"" /> </row>
<row id=""5""><seat number=""5C"" status=""0"" /> </row>
<row id=""6""><seat number=""6C"" status=""0"" /> </row>
<row id=""7""><seat number=""7C"" status=""0"" /> </row>
<row id=""8""><seat number=""8C"" status=""0"" /> </row>
<row id=""9""><seat number=""9C"" status=""0"" /> </row>
<row id=""10""><seat number=""10C"" status=""0"" /> </row>
</column>
<column id=""2"">
<row id=""1""><seat number=""1B"" status=""0"" /> </row>
<row id=""2""><seat number=""2B"" status=""0"" /> </row>
<row id=""3""><seat number=""3B"" status=""0"" /> </row>
<row id=""4""><seat number=""4B"" status=""0"" /> </row>
<row id=""5""><seat number=""5B"" status=""0"" /> </row>
<row id=""6""><seat number=""6B"" status=""0"" /> </row>
<row id=""7""><seat number=""7B"" status=""0"" /> </row>
<row id=""8""><seat number=""8B"" status=""0"" /> </row>
<row id=""9""><seat number=""9B"" status=""0"" /> </row>
<row id=""10""><seat number=""10B"" status=""0"" /> </row>
</column>
<column id=""3"">
<row id=""1""><seat number=""#"" status=""blank""/> </row>
<row id=""2""><seat number=""#"" status=""blank""/> </row>
<row id=""3""><seat number=""#"" status=""blank""/> </row>
<row id=""4""><seat number=""#"" status=""blank""/> </row>
<row id=""5""><seat number=""#"" status=""blank""/> </row>
<row id=""6""><seat number=""#"" status=""blank""/> </row>
<row id=""7""><seat number=""#"" status=""blank""/> </row>
<row id=""8""><seat number=""#"" status=""blank""/> </row>
<row id=""9""><seat number=""#"" status=""blank""/> </row>
<row id=""10""><seat number=""#"" status=""blank""/> </row>
</column>
<column id=""4"">
<row id=""1""><seat number=""1A"" status=""0"" /> </row>
<row id=""2""><seat number=""2A"" status=""0"" /> </row>
<row id=""3""><seat number=""3A"" status=""0"" /> </row>
<row id=""4""><seat number=""4A"" status=""0"" /> </row>
<row id=""5""><seat number=""5A"" status=""0"" /> </row>
<row id=""6""><seat number=""6A"" status=""0"" /> </row>
<row id=""7""><seat number=""7A"" status=""0"" /> </row>
<row id=""8""><seat number=""8A"" status=""0"" /> </row>
<row id=""9""><seat number=""9A"" status=""0"" /> </row>
<row id=""10""><seat number=""10A"" status=""0"" /> </row>
</column>
</Lower-Deck>
</Seat-Map>"
;
DataTable result = new DataTable("SeatData");
DataColumn columnColumn = result.Columns.Add("column", typeof(Int32));
DataColumn rowColumn = result.Columns.Add("row", typeof(Int32));
DataColumn seatColumn = result.Columns.Add("seat", typeof(String));
DataColumn deckColumn = result.Columns.Add("deck", typeof(Int32));
DataColumn statusColumn = result.Columns.Add("status", typeof(Int32));
XElement.Parse(
XmlData
)
.Descendants("seat")
.ToList()
.ForEach(
(element) =>
{
DataRow row = result.NewRow();
row.SetField<int>(columnColumn, Convert.ToInt32(element.Parent.Parent.Attribute("id").Value));
row.SetField<int>(rowColumn, Convert.ToInt32(element.Parent.Attribute("id").Value));
row.SetField<string>(seatColumn, element.Attribute("number").Value);
int deckNo = -1;
if (element.Parent.Parent.Parent.Name.LocalName == "Lower-Deck")
deckNo = 1;
row.SetField<int>(deckColumn, deckNo);
string statusString = element.Attribute("status").Value;
int statusValue = -1;
if (statusString == "blank")
statusValue = 1;
else if (statusString == "0")
statusValue = 0;
row.SetField<int>(statusColumn, statusValue);
result.Rows.Add(row);
}
);
result.AsEnumerable()
.ToList()
.ForEach(
(row) =>
Console.WriteLine(string.Join(",", row.ItemArray))
);
}
}
}
使用系统;
使用系统数据;
使用System.Linq;
使用System.Xml.Linq;
命名空间控制台应用程序2
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串XmlData=@”
"
;
数据表结果=新数据表(“SeatData”);
DataColumn=result.Columns.Add(“column”,typeof(Int32));
DataColumn rowColumn=result.Columns.Add(“行”,typeof(Int32));
DataColumn seatColumn=result.Columns.Add(“seat”,typeof(String));
DataColumn deckColumn=result.Columns.Add(“deck”,typeof(Int32));
DataColumn statusColumn=result.Columns.Add(“status”,typeof(Int32));
解析(
XML数据
)
.继承人(“席位”)
托利斯先生()
弗雷奇先生(
(元素)=>
{
DataRow row=result.NewRow();
row.SetField(columnColumn,Convert.ToInt32(element.Parent.Parent.Attribute(“id”).Value));
row.SetField(rowColumn,Convert.ToInt32(element.Parent.Attribute(“id”).Value));
row.SetField(seatColumn,element.Attribute(“number”).Value);
int deckNo=-1;
if(element.Parent.Parent.Parent.Name.LocalName==“下层”)
deckNo=1;
行设置字段(deckColumn,deckNo);
string statusString=element.Attribute(“status”).Value;
int statusValue=-1;
如果(statusString==“空白”)
statusValue=1;
else if(statusString==“0”)
statusValue=0;
行.设置字段(statusColumn,statusValue);
结果.行.添加(行);
}
);
result.AsEnumerable()
托利斯先生()
弗雷奇先生(
(世界其他地区)=>
Console.WriteLine(string.Join(“,”,row.ItemArray))
);
}
}
}
结果如下:
需要考虑的几件事:
你正在使用的数据库引擎是什么?我没有使用任何xml字符串获取其他API(响应)的数据库。我只是想理解一下。所以您只需要将Xml字符串转换为DataTable类型?是的,但我需要以下列:列、行、座位、甲板、状态。这意味着1、1、1c、1、0谢谢Rikki的帮助。
public static DataTable querySeat(string bus_id)
{
DataTable dt = new DataTable();
DataColumn dc;
dc = new DataColumn("column", Type.GetType("System.Int32"));
dt.Columns.Add(dc);
dc = new DataColumn("row", Type.GetType("System.Int32"));
dt.Columns.Add(dc);
dt.Columns.Add("seat"); // Seat Label
dc = new DataColumn("deck", Type.GetType("System.Int32")); // Deck, 1 = Lower Deck, 2 = Upper Deck
dt.Columns.Add(dc);
dt.Columns.Add("status"); // Status, 1 = Available, 0 = Taken
return dt;
}
using System;
using System.Data;
using System.Linq;
using System.Xml.Linq;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string XmlData = @"<Seat-Map>
<Lower-Deck>
<column id=""1"">
<row id=""1""><seat number=""1C"" status=""0"" /> </row>
<row id=""2""><seat number=""2C"" status=""0"" /> </row>
<row id=""3""><seat number=""3C"" status=""0"" /> </row>
<row id=""4""><seat number=""4C"" status=""0"" /> </row>
<row id=""5""><seat number=""5C"" status=""0"" /> </row>
<row id=""6""><seat number=""6C"" status=""0"" /> </row>
<row id=""7""><seat number=""7C"" status=""0"" /> </row>
<row id=""8""><seat number=""8C"" status=""0"" /> </row>
<row id=""9""><seat number=""9C"" status=""0"" /> </row>
<row id=""10""><seat number=""10C"" status=""0"" /> </row>
</column>
<column id=""2"">
<row id=""1""><seat number=""1B"" status=""0"" /> </row>
<row id=""2""><seat number=""2B"" status=""0"" /> </row>
<row id=""3""><seat number=""3B"" status=""0"" /> </row>
<row id=""4""><seat number=""4B"" status=""0"" /> </row>
<row id=""5""><seat number=""5B"" status=""0"" /> </row>
<row id=""6""><seat number=""6B"" status=""0"" /> </row>
<row id=""7""><seat number=""7B"" status=""0"" /> </row>
<row id=""8""><seat number=""8B"" status=""0"" /> </row>
<row id=""9""><seat number=""9B"" status=""0"" /> </row>
<row id=""10""><seat number=""10B"" status=""0"" /> </row>
</column>
<column id=""3"">
<row id=""1""><seat number=""#"" status=""blank""/> </row>
<row id=""2""><seat number=""#"" status=""blank""/> </row>
<row id=""3""><seat number=""#"" status=""blank""/> </row>
<row id=""4""><seat number=""#"" status=""blank""/> </row>
<row id=""5""><seat number=""#"" status=""blank""/> </row>
<row id=""6""><seat number=""#"" status=""blank""/> </row>
<row id=""7""><seat number=""#"" status=""blank""/> </row>
<row id=""8""><seat number=""#"" status=""blank""/> </row>
<row id=""9""><seat number=""#"" status=""blank""/> </row>
<row id=""10""><seat number=""#"" status=""blank""/> </row>
</column>
<column id=""4"">
<row id=""1""><seat number=""1A"" status=""0"" /> </row>
<row id=""2""><seat number=""2A"" status=""0"" /> </row>
<row id=""3""><seat number=""3A"" status=""0"" /> </row>
<row id=""4""><seat number=""4A"" status=""0"" /> </row>
<row id=""5""><seat number=""5A"" status=""0"" /> </row>
<row id=""6""><seat number=""6A"" status=""0"" /> </row>
<row id=""7""><seat number=""7A"" status=""0"" /> </row>
<row id=""8""><seat number=""8A"" status=""0"" /> </row>
<row id=""9""><seat number=""9A"" status=""0"" /> </row>
<row id=""10""><seat number=""10A"" status=""0"" /> </row>
</column>
</Lower-Deck>
</Seat-Map>"
;
DataTable result = new DataTable("SeatData");
DataColumn columnColumn = result.Columns.Add("column", typeof(Int32));
DataColumn rowColumn = result.Columns.Add("row", typeof(Int32));
DataColumn seatColumn = result.Columns.Add("seat", typeof(String));
DataColumn deckColumn = result.Columns.Add("deck", typeof(Int32));
DataColumn statusColumn = result.Columns.Add("status", typeof(Int32));
XElement.Parse(
XmlData
)
.Descendants("seat")
.ToList()
.ForEach(
(element) =>
{
DataRow row = result.NewRow();
row.SetField<int>(columnColumn, Convert.ToInt32(element.Parent.Parent.Attribute("id").Value));
row.SetField<int>(rowColumn, Convert.ToInt32(element.Parent.Attribute("id").Value));
row.SetField<string>(seatColumn, element.Attribute("number").Value);
int deckNo = -1;
if (element.Parent.Parent.Parent.Name.LocalName == "Lower-Deck")
deckNo = 1;
row.SetField<int>(deckColumn, deckNo);
string statusString = element.Attribute("status").Value;
int statusValue = -1;
if (statusString == "blank")
statusValue = 1;
else if (statusString == "0")
statusValue = 0;
row.SetField<int>(statusColumn, statusValue);
result.Rows.Add(row);
}
);
result.AsEnumerable()
.ToList()
.ForEach(
(row) =>
Console.WriteLine(string.Join(",", row.ItemArray))
);
}
}
}