这里有一个XML文件块。我想获取ToyId的所有示例并将其放入数组中。以及只抓取具有“Hastoys =“YES””属性的节点。
<Bookstore Hastoys="YES">
<Authors>7</Authors>
<Location>Austin TX</Location>
<Employees>15</Employees>
<ToyList>
<ToyId>124</ToyId>
<ToyId>1251</ToyId>
</ToyList>
<ToyList>
<ToyId>255-2</ToyId>
<ToyId>6623</ToyID>
</ToyList>
</Bookstore>
var list = from r in doc.Descendants("Bookstore")
.Where(node => (string)node.Attribute("HasToys") == "YES")
select new
{
ToyId = r.Element("ToyList")?.Element("ToyId")?.Value,
};
我尝试使用上面的查询,但它只返回我玩具id的第一个示例,然后转到下一个块。因此输出将是:124,跳过其他的玩具。
1条答案
按热度按时间9lowa7mx1#
XML中的一些问题/顾虑:
1.的结束标记无效
Bookstore
元素中的属性为“Hastoys”但你的代码指的是“HasToys”
方法1
假设您修复了上述问题/关注点,使用
.Descendants("ToyList").Elements("ToyId")
获取ToyList
元素下的每个ToyId
元素。方法2
您也可以使用XPath