List <xnode>检索某些Attribute </xnode>

时间:2014-07-26 18:16:42

标签: c# xml linq linq-to-xml

我有以下事件:

private void listBox_Items_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBox_Items.SelectedIndex > -1)
        {
            XDocument xDoc = XDocument.Load(FileName);

            var doc = xDoc.Descendants("item")
                          .Where(x => x.Attribute("id").Value == listBox_Items.Text)
                          .Select(x => x.Nodes())
                          .SelectMany(x => x.ToList())
                          .ToList();
            XNode name = doc[0];
            XNode id = doc[1];
        }
    }

我已经XNode name = doc[0];给了我<name value="Ruby Pouch I" />,但我希望得到Ruby Pouch I

感谢任何反馈!

2 个答案:

答案 0 :(得分:1)

如果您只是想选择value属性,则应该这样做:

var values = xDoc.Descendants("item")
                 .Where(x => x.Attribute("id").Value == listBox_Items.Text)
                 .Select(x => x.Attribute("value").Value)
                 .ToList();

根本无需拨打Nodes()SelectMany

答案 1 :(得分:0)

可能有更好的方法,而不是肯定地归零到XNode。

但特别是在你手持XNode且值设置为<name value="Ruby Pouch I" />的情况下,将其版式化为XElement并获取如下属性值:

string value = (name as XElement).Attribute("value").Value;

<强>更新

评论:

  

是否可以将其置于For循环中,因此我不必声明   每一个人?

您就是这样做的:

foreach(var element in doc.OfType<XElement>)
{
   string value = element.Attribute("value").Value;
}

OR

var values = doc.OfType<XElement>().Select(el => el.Attribute("value").Value);