【问题标题】:How to deserialize xml string to datatable using c#如何使用c#将xml字符串反序列化为数据表
【发布时间】:2015-01-26 20:59:25
【问题描述】:

请建议我使用 c# 将以下 xml 字符串反序列化为数据表的任何解决方案。我没有任何相关的解决方案。提前致谢。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<seatMap>
  <errorCode>0</errorCode>
    <xml>
      <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> 
    </xml>
  </seatMap>

但我需要从该 XML 字符串中跟踪 DataTable:

public static DataTable querySeat(string bus_id)
    {
        // Query the Seat Layout of the Trip
        DataTable dt = new DataTable();
        DataColumn dc;
        dc = new DataColumn("column", Type.GetType("System.Int32")); // Column No. of the seat
        dt.Columns.Add(dc);
        dc = new DataColumn("row", Type.GetType("System.Int32")); // Row N. of the seat
        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;
    }

数据表输出:

Coulmn        |      Row      |       Seat     |      Deck     |   Status
--------------------------------------------------------------------------
1                    1                 1c               1           0
1                    2                 2c               1           0
1                    3                 3c               1           0 

【问题讨论】:

    标签: c# c#-4.0 c#-3.0


    【解决方案1】:

    检查以下代码

    public static DataTable querySeat(string id)
    {
        string xmlStr = "";           //Place Your XML String here
    
        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(HttpUtility.HtmlDecode(xmlStr)).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);
              }
           );
        return result;
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 Dataset 的 WriteXML 和 ReadXML 方法将 DataSet 转换为 XML 并返回。 (检查,例如,Convert Dataset to XML

      这只有在您自己也从应用程序中创建 XML 时才有可能。

      【讨论】:

        【解决方案3】:

        使用 DataTable 对象的 ReadXml 方法。

        【讨论】:

        • 当我使用 ReadXml 方法时,我得到以下输出 codeerrorCode | xml------------------------------------------------ ----------------- 0 | ........座位图>
        • 您可能需要花一些时间来处理 xml 以使其正确。你要关闭下层标签吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多