我需要知道从项目目录中读取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.
请参阅上面的代码并建议我为此做些什么?
先谢谢。
答案 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