我有以下事件:
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
感谢任何反馈!
答案 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);