【发布时间】:2012-02-24 23:14:09
【问题描述】:
我正在尝试使用 XElement 来找出属性 ID 的父节点。请参阅下面的示例 这是我的数据..
<Data>
<Description>MASTER</Description>
<Data>
<Description>Parent1</Description>
<Data id="GUID1" Description="THIS IS A TEST" />
<Data id="GUID2" Description="THIS IS A TEST" />
<Data id="GUID3" Description="THIS IS A TEST" />
</Data>
<Data>
<Description>Parent2</Description>
<Data id="GUID4" Description="THIS IS A TEST" />
<Data id="GUID5" Description="THIS IS A TEST" />
</Data>
<Data id="GUID6" Description="THIS IS A TEST" />
</Data>
如果我想找出 "GUID6" 和 "GUID1" 父母,结果将是 GUID6 = "MASTER" 对于 GUID1="MASTERParent1" 但我的结果不正确。请有人帮助我。
我还希望输出为 "MASTER.Parent1",因此它使用“点”将主控和父级分开
这是我的代码
protected void Page_Load(object sender, EventArgs e)
{
var s = "<Data><Description>MASTER</Description><Data><Description>PARENT1</Description><Data id=\"GUID1\" Description=\"THIS IS A TEST\" /><Data id=\"GUID2\" Description=\"THIS IS A TEST\" /><Data id=\"GUID3\" Description=\"THIS IS A TEST\" /></Data><Data><Description>PARENT2</Description><Data id=\"GUID4\" Description=\"THIS IS A TEST\" /><Data id=\"GUID5\" Description=\"THIS IS A TEST\" /></Data><Data id=\"GUID6\" Description=\"THIS IS A TEST\" /></Data>";
var doc = XElement.Load(new StringReader(s));
var result = (from data in doc.Descendants("Data").Where(x => x.Attribute("id") != null)
select new
{
Id = data.Attribute("id").Value,
Decription = data.Attribute("Description").Value,
Parent = data.Parent.Value
}).ToList();
}
【问题讨论】:
-
为什么
Parent2是 GUID6 的父级? -
很好看。你是对的,它的“主人”我已经更新了
标签: c# linq linq-to-xml xelement