【问题标题】:what does the error "System.Xml.Linq.XDocument' does not contain a def" mean?错误“System.Xml.Linq.XDocument'不包含def”是什么意思?
【发布时间】:2016-09-26 16:36:49
【问题描述】:

我正在尝试编写代码以将 xml 文件转换为数据表。 我收到以下错误

System.Xml.Linq.XDocument' 不包含“DocumentNode”的定义,并且找不到接受“System.Xml.Linq.XDocument”类型的第一个参数的扩展方法“DocumentNode”(您是否缺少使用指令还是程序集引用?)

我错过了什么?

下面是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml.XPath;

using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {



            var xdoc = System.Xml.Linq.XDocument.Load(filename);
            System.Xml.XmlElement xelRoot = xdoc.DocumentElement;
            System.Xml.XmlNodeList xList = xelRoot.SelectNodes("/rulebase/security/rules/entry");

            int x = 0;
            int y = 0;
            string[] ColumnArray = new string[25];
            string[] RowArray = new string[25];


            foreach (System.Xml.XmlNode pNode in xList)
            {



                if (pNode.ChildNodes.Count = 0)
                {

                }
                else
                {
                    string val1 = "";
                    string nodeVal = "";

                    string nodeName = pNode.name;
                    foreach (System.Xml.XmlNode childNode in pNode.ChildNodes)
                    {
                        val1 = val1 + childNode.value + ", ";
                    }
                    val1 = val1 + " ,";
                    nodeVal = val1.substring(0, val1.length - 3);

                    ColumnArray[x] = nodeName;
                    RowArray[y] = nodeVal;
                    x++;
                    y++;

                }
            }

            System.Data.DataTable table1 = new System.Data.DataTable("entry");

            foreach (string s in ColumnArray)
            {
                table1.Columns.Add(s);
            }

            System.Data.DataRow row;
            row = table1.LoadDataRow(RowArray, true);
        }

    }
}

【问题讨论】:

  • 您正在混合 X* 和 Xml* 系列的类。那是行不通的。 .NET 有(至少)2 个不同的 API 用于处理 Xml,选择一个。我的选择是基于 Linq 的。
  • 知道了!谢谢@HenkHolterman

标签: c# xml


【解决方案1】:

(一开始没看懂题主的评论,这里说点详细的)

较旧的System.Xml.XmlDocumentDocumentElement(代码中正在使用它...我不知道问题中提到的 DocumentNode 来自哪里)。

System.Xml.Linq.XDocument

  • 是较新的 LINQ to XML 类
  • 没有DocumentElement
  • 例如使用xdoc.Root.Name 获取根元素的名称

欲了解更多信息XMlDocument vs XDocument

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多