从 XML 文件中读取节点属性
本文关键字:节点 属性 读取 XML 文件 | 更新日期: 2023-09-27 17:57:06
我有以下XML文件。
<?xml version="1.0" encoding="utf-8" ?>
<Countries>
<Country>
<Id>101</Id>
<City>Austin</City>
</Country>
<Country>
<Id>102</Id>
<City>Dallas</City>
</Country>
<Country>
<Id>103</Id>
<City>Chicago</City>
</Country>
<Country>
<Id>104</Id>
<City>Aman</City>
</Country>
</Countries>
我正在尝试从代码后面读取它。这是代码
List<City> cityList = new List<City>();
string url = "/App_Data/Countries.xml";
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(url));
XmlNodeList nodeList = doc.SelectNodes("Country");
foreach (XmlNode node in nodeList)
{
if (node != null)
{
int id = int.Parse(node.Attributes["Country"].Value);
string name = node.Attributes["City"].Value;
City city = new City(id, name);
cityList.Add(city);
}
}
出于某种原因,下面的代码
XmlNodeList nodeList = doc.SelectNodes("Country");
根本不返回任何节点。
根据 https://msdn.microsoft.com/en-us/library/hcebdtae(v=vs.110).aspx,这是SelectNodes
方法的作用
选择与 XPath 表达式匹配的节点列表。
既然你这样做
XmlNodeList nodeList = doc.SelectNodes("Country");
您正在选择当前上下文中的所有<Country>
元素,这是根,但<Country>
元素实际上在<Countries>
内,所以这就是您根本没有节点的原因。将上面的语法更改为此
XmlNodeList nodeList = doc.SelectNodes("Countries/Country");
下面是有关 XPath 表达式示例的详细信息:https://msdn.microsoft.com/en-us/library/ms256086%28v=vs.110%29.aspx
如果你的目标是.NET 3.5或更高版本,我会考虑使用XDocument API而不是XmlDocument API(参见XDocument或XMLDocument)。
对于您的情况,实现如下所示:
var cityList = new List<City>();
XDocument xDoc = XDocument.Load(Server.MapPath("/App_Data/Countries.xml"));
foreach (XElement xCountry in xDoc.Root.Elements())
{
int id = int.Parse(xCountry.Element("Id").Value);
string name = xCountry.Element("City").Value;
cityList.Add(new City(id, name));
}
谢谢大家。想通了。这是更新的代码。但我认为一定有比我更好的填充对象的方法。
List<City> cityList = new List<City>();
string url ="/App_Data/Countries.xml";
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath(url));
XmlNodeList nodeList = doc.SelectNodes("//Country");
foreach(XmlNode node in nodeList){
if (node != null)
{
int id = int.Parse(node.ChildNodes.Item(0).InnerText);
string name = node.ChildNodes.Item(1).InnerText;
City city = new City(id,name);
cityList.Add(city);
}
}