如何从C#中的项目目录中读取Xml文件?

时间:2015-07-01 14:18:04

标签: c#

我需要知道从项目目录中读取xml文件,如下所示代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using crudpartialviewsjqureyajax.Models;
using System.Data;
using System.Xml;

namespace crudpartialviewsjqureyajax.Controllers
{

    public class snehprajapatController : Controller
    {

        public void getinstructors()
        {
            try
            {
                List<string> name = null;
                XmlDocument xml = new XmlDocument();
                xml.LoadXml(@"~\App_Data\Trainings.xml");//Here given xml path location
                XmlNodeList xnList = xml.SelectNodes("/Trainings/Training");
                foreach (XmlNode xn in xnList)
                {
                    new List<string>{
                xn["name"].InnerText
                };

                }

                //return name;
            }
            catch(Exception ex)
            {
                Response.Write(ex.Message);
            }

        }
    }
}

这里得到的错误是:

An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll

Additional information: Data at the root level is invalid. Line 1, position 1.

请参阅上面的代码并建议我为此做些什么?

先谢谢。

2 个答案:

答案 0 :(得分:1)

LoadXml用于加载文字XML字符串,而不是用于指向文件路径。毫不奇怪,您的路径不是有效的XML。您可以使用xml.Load("...")从文件中加载XmlDocument

但是,我强烈建议您使用LINQ to XML,除非您有充分的理由使用旧的XmlDocument API。我已根据您的代码进行了猜测,但如果您的XML不是以这种方式构建的话,这可能无法正常工作。

var doc = XDocument.Load(@"~\App_Data\Trainings.xml");

var instructorNames = doc.Descendants("Training")
    .Elements("name")
    .Select(e => e.Value)
    .ToList();

答案 1 :(得分:0)

您应该使用xml.Load方法替换xml.LoadXml,因为: XmlDocument.Load:用于从流,TextReader,路径/ URL或XmlReader加载XML。 虽然XmlDocument.LoadXml用于加载字符串中包含的XML。

所以你的代码应该是这样的:

xml.Load(@"~\App_Data\Trainings.xml");//Here given xml path location