Linq XML使用属性读取元素

时间:2017-08-14 06:54:42

标签: xml linq

尝试从第二行获取数据。 在第二行我需要阅读: - 关口 subrows - rows。

我的代码非常令人困惑我获得所有行... 请帮忙解决一下。我无法弄清楚如何使用复杂的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>

1 个答案:

答案 0 :(得分:0)

我在c#中使用xml linq将结果放入数据表中。见下面的代码

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);
            }
        }
    }
}