使用c#同时读取xml元素内容和属性

时间:2017-11-29 16:53:55

标签: c# xml winforms datagridview

我想要做的就是: 我可以同时读取xml元素的值和属性。 我的英文不是很好。对不起。

<all>
    <hp id="1" t="K" k="1">DÖNEN VARLIKLAR</hp>
    <hp id="10" t="K" k="10">HAZIR DEĞERLER</hp>
    <hp id="100" t="K" k="100">KASA</hp>
    <hp id="1" t="B" k="100.02">ŞUBE KASASI</hp>
    <hp id="5417" t="B" k="100.Y0001">Yeni Hesap Adı</hp>
</all>

这是我的xml文件。 我想读取hp元素的值和k属性,我想把我在行中读取的值放在datagridview中的列下。这是我的c#代码:

dataGridView2.ColumnCount = 2;
        dataGridView2.Columns[0].Name = "Hesap Kodu";
        dataGridView2.Columns[1].Name = "Hesap Adı";

        XDocument xDoc = XDocument.Load(@"C:\Luca_Offline_Yerel\hp461979110642727.xml");
        XElement rootElement = xDoc.Root;

        XmlDocument i = new XmlDocument();
        i.Load(@"C:\Luca_Offline_Yerel\hp461979110642727.xml");
        XmlNodeList xnList = i.SelectNodes("/all / hp");

        DataSet ds = new DataSet();
        //xml dosyamızı okumak için bir reader oluşturuyoruz.
        XmlReader xmlFile;
        xmlFile = XmlReader.Create(@"C:\Luca_Offline_Yerel\hp461979110642727.xml", new XmlReaderSettings());
        //içeriği Dataset e aktarıyoruz.
        ds.ReadXml(xmlFile);
        //datagridviewin kaynağı olarak dataseti gösteriyoruz.




        String Kod, Ad;
        foreach (XElement rehberimiz in rootElement.Elements())
        {
            //yapmam gereken ad'a hp nin element içeriğini ekleme! 
            Kod = rehberimiz.Attribute("k").Value;
            Ad = rehberimiz.Element("hp_Text").Value;
            dataGridView2.Rows.Add(Kod, Ad);
        }

但我在这一行上收到错误:

Ad = rehberimiz.Element("hp_Text").Value;

2 个答案:

答案 0 :(得分:0)

您应该使用FirstNode.ToString()代替Element("hp_Text").Value

    String Kod, Ad;
    foreach (XElement rehberimiz in rootElement.Elements())
    {
        //yapmam gereken ad'a hp nin element içeriğini ekleme! 
        Kod = rehberimiz.Attribute("k").Value;
        Ad = rehberimiz.FirstNode.ToString();
        dataGridView2.Rows.Add(Kod, Ad);
    }

答案 1 :(得分:0)

这样做:

XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.Load("XMLFile1.xml");

        XmlNode oRootNode = xmlDocument.SelectSingleNode("/all");

        foreach (XmlNode item in oRootNode.ChildNodes)
        {
            var Kod = item?.Attributes["k"]?.InnerText;
            var Ad = item?.InnerText;
            Console.WriteLine(Kod + " " + Ad);
        }

将Kod和广告添加到行。这将解决您的问题。