C# XPath和属性

C# XPath和属性,c#,.net,xml,xpath,C#,.net,Xml,Xpath,我试图遍历XML文档并选择某些节点属性。XML是动态生成的 <?xml version="1.0" encoding="ISO-8859-1"?> <streams> <stream> <title>+23 (Panama)</title> <info resolution="768x420" bitrate="1000kbps"/> ----- Need These <swfUrl>http://www.fre

我试图遍历XML文档并选择某些节点属性。XML是动态生成的

<?xml version="1.0" encoding="ISO-8859-1"?>
<streams>
<stream>
<title>+23 (Panama)</title>
<info resolution="768x420" bitrate="1000kbps"/> ----- Need These
<swfUrl>http://www.freeetv.com/script/mediaplayer/player.swf</swfUrl>
<link>rtmp://200.75.216.156/live/</link>
<pageUrl>http://www.freeetv.com/</pageUrl>
<playpath>livestream</playpath>
<language>Music</language>
<advanced></advanced>
</stream>
</streams>

请告诉我我做错了什么?

要选择您需要使用的最后一个节点的
分辨率属性,请执行以下操作:

xn["info"].Attributes["resolution"].Value
或者,您可以尝试LINQ to XML以获得相同的结果(我发现它的API更易于使用):


如果要使用XPath选择节点的属性,应使用
SelectSingleNode
方法,例如:

xn.SelectSingleNode("info/@resolution").Value

下面是一个LINQ到XML的示例,用于从特定属性名或属性名列表的整个文档中提取属性

var xml = XElement.Parse("http://127.0.0.1/www/xml.php");

// find all attributes of a given name
var attributes = xml
     .Descendants()
     .Attributes("AttributeName")

// find all attributes of multiple names
var attributes = xml
    .Descendants()
    .Attributes()
    .Where(a => ListOfAttribNames.Contains(a.Name.LocalName))

更换

lvi.SubItems.Add(xn["//info/@resolution"].Value); 
lvi.SubItems.Add(xn.SelectSingleNode("info/@resolution").Value); 

lvi.SubItems.Add(xn["//info/@resolution"].Value); 
lvi.SubItems.Add(xn.SelectSingleNode("info/@resolution").Value); 

好的做法是检查属性!=获取值之前为null。细节就是魔鬼。
XmlNode
的默认索引器的文档(和Intellisense)说“第一个匹配指定名称的XmlElement”。属性不是元素。它不是,但你可能不相信这句话……我刚才看到了你的答案,可能是因为这只是一个提示,而我告诉OP他需要做什么,以便在执行修改后,他的代码能够按预期工作。请将我的答案复制粘贴到你的答案中,我将删除我的答案。