我有一个XElement(myParent),其中包含我希望从中提取数据的多个级别的子级。感兴趣的元素位于父母的已知位置。
我知道我能够通过以下方式获得子元素:
myParent.Element(childName);
或
myParent.Element(level1).Element(childName);
如果我想循环遍历不同级别的元素列表并循环遍历列表,我无法弄清楚如何执行此操作。例如,我有兴趣获得以下元素:
myParent.Element("FieldOutputs").Element("Capacity");
myParent.Element("EngOutputs").Element("Performance")
myParent.Element("EngOutputs").Element("Unit").Element("Efficiency")
如何在数组中定义这些位置,以便我可以简单地遍历数组?
即。
string[] myStringArray = {"FieldOutputs.Capacity", "EngOutputs.Performance", "EngOutputs.Unit.Efficiency"};
for (int i=0; i< myArray.Count(); i++)
{
XElement myElement = myParent.Element(myStringArray);
}
我知道上面的方法不起作用,只是想有效地展示我想要实现的目标。
感谢任何反馈。
谢谢你, 贾斯汀
答案 0 :(得分:6)
虽然通常我不愿意建议使用XPath,但这可能是最合适的方法,使用XPathSelectElement
:
string[] paths = { "FieldOutputs/Capacity", "EngOutputs/Performance",
"EngOutputs/Unit/Efficiency"};
foreach (string path in paths)
{
XElement element = parent.XPathSelectElement(path);
if (element != null)
{
// ...
}
}
答案 1 :(得分:0)
我相信,Descendants()
方法正是您所寻求的。例如:
var descendants = myParent.Descendants();
foreach (var e in descendants) {
...
}
http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.descendants.aspx
修改强>
更仔细地查看您的问题,看起来您可能想要使用XPathSelectElements()
var descendants = myParent.XPathSelectElements("./FieldOutputs/Capacity | ./EngOutputs/Performance | ./EngOutputs/Units/Efficency");