List< XNode>检索某些属性

本文关键字:属性 检索 XNode List | 更新日期: 2023-09-27 18:15:14

我有以下事件:

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

任何反馈都是赞赏的!

List< XNode>检索某些属性

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

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

根本不需要调用Nodes()SelectMany

可能有更好的方法,而不是肯定归零到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;
}

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