【问题标题】:Linq XML Read Element with Attribute具有属性的 Linq XML 读取元素
【发布时间】:2017-08-14 06:54:41
【问题描述】:

试图从第二行获取数据。 在第二行中,我需要阅读:- 山口 子行 - 行。

我的代码非常混乱,我得到了所有的行...... 请帮助如何去做..我不知道如何处理复杂的 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>

【问题讨论】:

    标签: xml linq


    【解决方案1】:

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

    【讨论】:

    • 你的天才..正是我所需要的..很抱歉打扰你。但是我将如何选择具有该属性的表。现在你已经使用了 firstOrDfault。我如何告诉它使用属性 náme'= eco 加载表
    • 我在使用 Descendants/Elements 时必须使用 firstOrDefault,因为您只需要一个表。 doc.Descendants("table").Where(x => (string)x.Attribute("name") == "eco – nadeem").FirstOrDefault();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多