在遍历 XDocument 元素时获取 xDocument 元素的子节点
本文关键字:元素 xDocument 子节点 获取 遍历 XDocument | 更新日期: 2023-09-27 18:37:06
如果我的问题不清楚,很抱歉。我从 xDocument 中得到了一堆元素和每个元素的属性。现在,我希望在每次迭代中获取每个节点的更多继承者,并遍历它们并获取它们的所有属性。
结构:
<Jobs>
<Job attr1=val1 attr2=val2 attr3=val3>
<InnerNode1 InnerAttr1=val6 InnerAttr2=7>
<InnerNodeChild1>
.........
</InnerNodeChild1>
<InnerNodeChild2>
............
</InnerNodeChild2>
<InnerNodeChild3>
.......
</InnerNodeChild3>
</InnerNode1>
<InnerNode2 InnerAttr1=val6 InnerAttr2=7>
<InnerNodeChild1>
.........
</InnerNodeChild1>
<InnerNodeChild2>
............
</InnerNodeChild2>
<InnerNodeChild3>
.......
</InnerNodeChild3>
</InnerNode2>
<InnerNode3 InnerAttr1=val6 InnerAttr2=7>
<InnerNodeChild1>
.........
</InnerNodeChild1>
<InnerNodeChild2>
............
</InnerNodeChild2>
<InnerNodeChild3>
.......
</InnerNodeChild3>
</InnerNode3>
</job>
<Job attr1=val4 attr2=val5>
<InnerNode1 InnerAttr1=val6 InnerAttr2=7>
<InnerNodeChild1>
.........
</InnerNodeChild1>
<InnerNodeChild2>
............
</InnerNodeChild2>
<InnerNodeChild3>
.......
</InnerNodeChild3>
</InnerNode1>
<InnerNode2 InnerAttr1=val6 InnerAttr2=7>
<InnerNodeChild1>
.........
</InnerNodeChild1>
<InnerNodeChild2>
............
</InnerNodeChild2>
<InnerNodeChild3>
.......
</InnerNodeChild3>
</InnerNode2>
<InnerNode3 InnerAttr1=val6 InnerAttr2=7>
<InnerNodeChild1>
.........
</InnerNodeChild1>
<InnerNodeChild2>
............
</InnerNodeChild2>
<InnerNodeChild3>
.......
</InnerNodeChild3>
</InnerNode3>
</Job>
.....
.....
.....
<OtherNodeInSameLevelAsJob>
</OtherNodeInSameLevelAsJob>
</Jobs>
好的,对于每个作业节点,只有一个 InnerNode1,它有自己的属性和内部节点。如果我想从每个 InnerNode1 获取所有属性和 InnerNodeChild,但在运行作业时,就像下一个示例一样,我需要做什么?
XDocument xDoc = XDocument.Load(xDr);
var Jobs = from Job in xDoc.Descendants("Job")
select new {
JobID = Job.Attribute("JobID").Value,
JobName = Job.Attribute("JobName").Value,
........
........
........
};
然后:
foreach(var Job in Jobs){
string JobId = Job.JobID;
string JobName = job.JobName;
.........
.........
.........
}
谢谢埃雷兹
获取每个InnerNode1
非常简单,您只需调用.Descendants("InnerNode1")
,您就会得到每个列表。 下面是一个可能适合您的示例。 我在节点上调用父级以获取其作业名称和 ID。
var innerchilds = xDoc.Descendants("InnerNode1").Select(x => new {
JobID = x.Parent.Attribute("JobID").Value,
JobName = x.Parent.Attribute("JobName").Value,
...
});
你的意思是在选择中选择吗?
var Jobs = from Job in xDoc.Descendants("Job")
select new {
JobID = Job.Attribute("JobID").Value,
JobName = Job.Attribute("JobName").Value,
InnerNode = from inner in Job.Elements("InnerNode")
select new
{
Name = inner.Attribute("Name")
}
........
........
........
};