C# 文件上载到load.XML

C# 文件上载到load.XML,c#,.net,linq-to-xml,C#,.net,Linq To Xml,我之前使用以下方法加载XML文件: XDocument doc = XDocument.Load("File.xml"); Visit(doc.Root); 现在我想使用FileUpload框加载文件: XmlDocument doc = new XmlDocument(); doc.Load(FileUpload1.FileContent); Visit(doc.root); 但是现在我在“(doc.root)

我之前使用以下方法加载XML文件:

        XDocument doc = XDocument.Load("File.xml");
        Visit(doc.Root);
现在我想使用FileUpload框加载文件:

        XmlDocument doc = new XmlDocument();
        doc.Load(FileUpload1.FileContent);
        Visit(doc.root);

但是现在我在“(doc.root)”上得到一个错误。它说“不包含‘Root’的定义,也不包含接受第一个参数类型的扩展方法‘Root’”。我做错了什么?

那是因为XmlDocument没有根属性;XmlDocument的根由对象的DocumentElement属性表示,在您的示例中:
doc.DocumentElement
,由于您的方法接收到一个XElement参数作为输入,因此您需要将XmlElement转换为XElement,然后再将其传递到Visit()方法。使用下面的功能进行此操作

  /// <summary>  
  /// Converts an XmlElement to an XElement.  
  /// </summary>  
  /// <param name="xmlelement">The XmlElement to convert.</param>  
  /// <returns>The equivalent XElement.</returns>  
  public static XElement ToXElement(XmlElement xmlelement)  
  {    
     return XElement.Load(xmlelement.CreateNavigator().ReadSubtree());  
  }

在您的两个示例中,
Root
Root
的大写字母不同。这是故意的吗?像这样?访问(doc.DocumentElement);它说它有一些无效参数…是的,XmlDocument中没有root属性,但DocumentElement将表示XML的实际根。访问方法的签名是什么,它接收的对象的类型是什么??公共静态无效访问(XElement元素)在传递XmlDocument之前,需要将XmlElement从XmlDocument转换为XElement。我将用代码更新答案以转换它。给我几分钟
  Visit(ToXElement(doc.DocumentElement));