Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 使用c将xml字符串转换为数据表#_C# 4.0_C# 3.0 - Fatal编程技术网

C# 4.0 使用c将xml字符串转换为数据表#

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=

我需要将以下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>
我得到的输出

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数据中提供的数据与上述定义不匹配。所以你可能想更新这个问题
  • 我宁愿将座位号、状态、行和甲板id作为座位对象(元素)的外键
  • 如果您想使用代码,请注意上面的using语句

  • 你正在使用的数据库引擎是什么?我没有使用任何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))
                );
            }
        }
    }