C# xml读取子节点的子节点

<area Country="China">
<province ID="1" provinceID="110000" province="北京">
<City CityID="110100" City="北京">
<Piecearea PieceareaID="110101" Piecearea="东城区"/>
<Piecearea PieceareaID="110102" Piecearea="西城区"/>
<Piecearea PieceareaID="110105" Piecearea="朝阳区"/>
<Piecearea PieceareaID="110106" Piecearea="丰台区"/>
<Piecearea PieceareaID="110107" Piecearea="石景山区"/>
<Piecearea PieceareaID="110108" Piecearea="海淀区"/>
<Piecearea PieceareaID="110109" Piecearea="门头沟区"/>
<Piecearea PieceareaID="110111" Piecearea="房山区"/>
<Piecearea PieceareaID="110112" Piecearea="通州区"/>
<Piecearea PieceareaID="110113" Piecearea="顺义区"/>
<Piecearea PieceareaID="110114" Piecearea="昌平区"/>
<Piecearea PieceareaID="110115" Piecearea="大兴区"/>
<Piecearea PieceareaID="110116" Piecearea="怀柔区"/>
<Piecearea PieceareaID="110117" Piecearea="平谷区"/>
<Piecearea PieceareaID="110228" Piecearea="密云县"/>
<Piecearea PieceareaID="110229" Piecearea="延庆县"/>
</City>
</province>
</area >
怎么读取省下面的市啊?根据选择不同的省显示不同的市?
cbcity.Items.Clear();

string xpath = string.Format("/area/province/{0}/City", cbprovince.SelectedItem.ToString());
XmlNodeList cities = doc.SelectNodes(xpath);
cbcity.Items.Add("不限");
foreach (XmlNode city in cities)
{
cbcity.Items.Add(city.Attributes["City"].Value);
}

if (cbcity.Items.Count > 0)
{
cbcity.SelectedIndex = 0;
}
这样写为什么不可以啊?应该怎么改啊?

xpath明显写错了

我不知道 cbprovince.SelectedItem.ToString() 到底是什么,所以我这里给你个例子


string xpath = string.Format("/area/province[@province=\"{0}\"]/City", "北京");

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-29
你这个根据不同的省获取不同的市,是不是把“省”作为一个参数传递进来,然后返回省下面的所有市名称?追问

那我写的不对吗?为什么没有呢???cities的count是0?

追答

说实话,用XmlDocument操作xml的方法,在微软.net3.5之后就不推荐了。不方便而且代码不够简洁。


你先看一下我理解的你的要求对不对?如果对的话,我给出推荐的实现方式


顺带偷偷告诉你XmlDocument操作xml,我已经不会了。

System.Xml.Linq

XDocument doc = XDocument.Load(@"e:\txt.xml");
var cities = doc.Descendants("City");
XElement city = cities.SingleOrDefault(c => c.Attribute("City").Value.Equals("北京"));
if (city != null)
{
    var pieceareas = city.Elements();
    foreach (var item in pieceareas)
    {
        Console.WriteLine(item.Attribute("Piecearea").Value);
    }
}

相似回答