C# XPath和属性
我试图遍历XML文档并选择某些节点属性。XML是动态生成的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 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他需要做什么,以便在执行修改后,他的代码能够按预期工作。请将我的答案复制粘贴到你的答案中,我将删除我的答案。