我有以下XML结构:
<row>
<field name="Id">1</field>
<field name="AreaId">1</field>
<field name="Name">ת"א</field>
</row>
<row>
<field name="Id">2</field>
<field name="AreaId">4</field>
<field name="Name">אבטליון</field>
</row>
我想用Linq迭代name
个节点。
我试过这个:
var items = (from i in doc.Descendants("row")
select new
{
Text = i.Value
}).ToList();
但它没有按照我需要的方式工作。有什么建议吗?
答案 0 :(得分:15)
var items = doc.Descendants("field")
.Where(node => (string)node.Attribute("name") == "Name")
.Select(node => node.Value.ToString())
.ToList();
答案 1 :(得分:11)
首先,确保您的XML具有单个根节点:
<rows>
<row>
<field name="Id">1</field>
<field name="AreaId">1</field>
<field name="Name">ת"א</field>
</row>
<row>
<field name="Id">2</field>
<field name="AreaId">4</field>
<field name="Name">אבטליון</field>
</row>
</rows>
之后,您可以使用以下代码加载xml:
string xml = //Get your XML here
XElement xElement = XElement.Parse(xml);
//This now holds the set of all elements named field
var items =
xElement
.Descendants("field")
.Where(n => (string)n.Attribute("name") == "Name");
答案 2 :(得分:1)
我认为Linq to Sql是最直接的方法:
var items = (from c in doc.Descendants("field")
where c.Attribute("name").Value == "Name"
select c.Value
).ToList();