【问题标题】:Reading the xml element content and attribute at the same time with c#用c#同时读取xml元素内容和属性
【发布时间】:2017-11-29 16:53:54
【问题描述】:

我正在尝试做的是: 我可以同时读取 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;

【问题讨论】:

  • 您可以在帖子中添加错误的详细信息吗?
  • 你遇到了什么错误?
  • 应该是 Ad = rehberimiz.Element("hp").Value;

标签: c# xml winforms datagridview


【解决方案1】:

这样做:

        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 和 Ad 添加到行。这将解决您的问题。

【讨论】:

  • 没问题☺️。当您的问题得到解决时,您可以投票给这个答案。完成后还要标记此问题已解决。谢谢
【解决方案2】:

您应该使用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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多