如何找出孩子的父母?
问题描述:
我想使用XElement来找出一个孩子的父节点。看下面的例子。这是我的数据:如何找出孩子的父母?
<Data>
<Description>King</Description>
<Data>
<Description>Mike</Description>
<Data id="GUID1" Description="THIS IS A TEST" />
</Data>
<Data>
<Description>David</Description>
<Data id="GUID2" Description="THIS IS A TEST" />
<Data id="GUID3" Description="THIS IS A TEST" />
</Data>
<Data id="GUID4" Description="THIS IS A TEST" />
</Data>
所以父母(国王)有两个孩子迈克和大卫。我想要找出谁是“大卫”的家长,我怎么能找到这个?
这里是我下面的代码:
protected void Page_Load(object sender, EventArgs e)
{
var s =
@"<Data>
<Description>King</Description>
<Data>
<Description>Mike</Description>
<Data id=""GUID1"" Description=""THIS IS A TEST"" />
</Data>
<Data>
<Description>David</Description>
<Data id=""GUID2"" Description=""THIS IS A TEST"" />
<Data id=""GUID3"" Description=""THIS IS A TEST"" />
</Data>
<Data id=""GUID4"" Description=""THIS IS A TEST"" />
</Data>";
var doc = XElement.Load(new StringReader(s));
var result = (from data in doc.Descendants("Data")
where (string)data.Attribute("id") != null
select new
{
Id = data.Attribute("id").Value,
Decription = data.Attribute("Description").Value,
Child = data.Parent.Element("Description").Value,
Parent = data.Parent.Parent.Value **** THIS LINE ****
});
foreach (var element in result)
{
Console.WriteLine("{0} {1}", element.Id, element.Decription);
}
}
我什么都试过,但没有运气。我一直在收到data.Parent.Parent.Value ="KingMikeDavid"
的全部结果,这是错误的。如何在没有孩子的情况下返回“国王”?
答
data.Parent.Parent
是指整个Data
元素,其值是其后代的组合值。你需要它的Description
孩子的值:
Parent = data.Parent.Parent == null ? null :
data.Parent.Parent.Element("Description").Value
答
我不知道LINQ的,但如果它不工作,你可以使用XPath来做到这一点。 http://www.codeproject.com/Articles/9494/Manipulate-XML-data-with-XPath-and-XmlDocument-C特意在中间看到表达式表。你需要像这样的表达。
/catalog/cd[last()] //selects the last cd child of catalog
+0
它不是我在寻找谢谢使用XElement – user929153 2012-02-27 13:38:13
抱歉,我忘了添加另一行中的XML 请参阅更新版本。这会抛出一个null执行选项? – user929153 2012-02-27 13:36:03
但是这个元素是最顶层的数据元素的一个孩子,它属于国王,可以这么说,没有父母......我编辑了这个案例的答案。 – user1096188 2012-02-27 13:45:33
谢谢你工作。 :-)花了很多时间在这.. – user929153 2012-02-27 13:47:38