我需要将以下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" /> </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>
我正在使用以下代码:
StringReader stringReader = new StringReader( Here I am passing xml string);
ds.ReadXml(stringReader);
DataTable dt = ds.Tables[0];
输出我
errorCode | xml
-------------------------------------------------------------------------------------------
0 | <Seat-Map><Lower-Deck><column id="1"><row id="1">..............
| ....................</Lower-Deck></Seat-Map>
但我需要从XML字符串中跟踪DataTable:
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;
}
答案 0 :(得分:0)
好吧,我希望这会有所帮助。我完成它的方法是解析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))
);
}
}
}
结果如下:
需要考虑的一些事项:
- 您在Xml数据中提供的数据与上述定义不匹配。所以你可能想要更新这个问题。
- 我宁愿将座位号,状态,行和牌组ID作为座位对象(元素)的外键。
- 如果您想使用它,请注意代码上方的using语句。
醇>