我有一个XML文档,我试图从中提取数据。
<folder>
<list index="1">
<item index="1" >
<field type="IMAGE">
<url>https://www.test.com/0001.png</url>
</field>
</item>
<item index="2">
<field type="IMAGE">
<url>https://www.test.com/0002.png</url>
</field>
</item>
</list>
等...
我试图获取所有字段列表&#34; IMAGE&#34;在索引列表的内部1. xml中有多个列表,但它们有其他索引,但我只想从索引1的列表中提取那些列表。我该怎么办?
我试着这样做:
foreach (var list in xmlDoc.Descendants("list"))
{
if (list.Attribute("index").Value == "1") // GET THE LIST
{
foreach (var field in list)
{
if (field.Attribute("type") != null && field.Attribute("type").Value == "IMAGE")
{
MessageBox.Show(field.Element("url").Value);
}
}
}
}
但是这给了我一条错误信息:
错误2 foreach语句无法对类型变量进行操作 &#39; System.Xml.Linq.XElement&#39;因为&#39; System.Xml.Linq.XElement&#39;才不是 包含&#39; GetEnumerator&#39;
的公开定义
我该如何解决这个问题?
答案 0 :(得分:3)
您尝试直接迭代元素,您需要迭代其后代字段元素,而不是:
foreach (var field in list)
你想:
foreach (var field in list.Descendants("field"))
尽管如此,更简单的方法是使用LINQ:
var urls = xmlDoc.Descendants("list")
.Where(e => (int)e.Attribute("index") == 1)
.Descendants("field")
.Where(e => (string)e.Attribute("type") == "IMAGE")
.Select(e => (string)e.Element("url"));
答案 1 :(得分:1)
因为问题有xpath
标签:)
//list[@index="1"]//field[@type="IMAGE"]/url/text()