2017-08-14 187 views
0

嘗試從第二行獲取數據。 在這第二行我需要閱讀: - col subrows - 行。Linq XML屬性讀取元素

它非常困惑一個我的代碼我得到的所有的行... 請幫助如何去it..I無法弄清楚如何與複雜的XML文檔

C#

 path = path + "/PongraweDriver.xml"; 
     XElement root = XElement.Load(path); 

     IEnumerable<XElement> datasource = 
      from el in root.Descendants("table") 
      where (string)el.Attribute("name") == "Eco driving" 
      select el; 

     IEnumerable<XElement> rowdata = 
      from elm in datasource.Descendants("row") 
      //where (string)el.Attribute("name") == "Eco driving" 
      select elm; 

     foreach (XElement elm in rowdata) 
      Console.WriteLine(elm); 
工作

XML

 <table cols="3" flags="16781440" id="drivers_group_ecodriving" 
     name="Eco driving" rows="3"> 
     <header> 
      <col name="№"/> 
      <col name="Grouping"/> 
      <col name="Count"/> 
     </header> 
     <row> 
      <col txt="1" val="0" vt="0"/> 
      <col txt="Kyaw Min Oo" val="0" vt="0"/> 
      <col txt="5" val="5" vt="2"/> 
      <subrows> 
       <row> 
        <col txt="1.1" val="0" vt="0"/> 
        <col txt="Harsh Brake Km/h.s" val="0" vt="0"/> 
        <col txt="2" val="2" vt="2"/> 
       </row> 
       <row> 
        <col txt="1.2" val="0" vt="0"/> 
        <col txt="OverSpeed-Medium" val="0" vt="0"/> 
        <col txt="3" val="3" vt="2"/> 
       </row> 
      </subrows> 
     </row> 
    </table> 

回答

0

我使用了XML LINQ在C#中把結果轉換成一個數據表。看到下面的代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.Data; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      XElement table = doc.Descendants("table").FirstOrDefault(); 

      DataTable dt = new DataTable((string)table.Attribute("name")); 

      XElement header = table.Element("header"); 
      foreach (XElement col in header.Elements("col")) 
      { 
       dt.Columns.Add((string)col.Attribute("name"), typeof(string)); 
      } 
      foreach (XElement row in table.Descendants("row")) 
      { 
       string[] rowData = row.Elements("col").Select(x => (string)x.Attribute("txt")).ToArray(); 
       dt.Rows.Add(rowData); 
      } 
     } 
    } 
} 
+0

你的天才..只是我需要..抱歉打擾你。但我將如何選擇具有屬性的表格。現在你已經使用firstOrDfault。我如何告訴它使用屬性náme'= eco –

+0

來加載表格,因爲只需要一個表格,所以在使用Descendants/Elements時我不得不使用firstOrDefault。 doc.Descendants(「table」)。其中(x =>(string)x.Attribute(「name」)==「eco - nadeem」)。FirstOrDefault(); – jdweng