按名称提取XElement子元素和孙子元素

本文关键字:元素 XElement 提取 | 更新日期: 2023-09-27 18:04:15

我有一个XElement (mypparent),其中包含我希望从中提取数据的多个级别的子元素。感兴趣的元素位于父元素的已知位置。

我知道我可以通过以下方式获得子元素:

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);
}

我知道上面的方法不起作用,但我只是想有效地展示我想要达到的目标。

感谢您的反馈。

谢谢你,贾斯汀

按名称提取XElement子元素和孙子元素

虽然通常我不太愿意建议使用XPath,但这里使用XPathSelectElement:

可能是最合适的方法。
string[] paths = { "FieldOutputs/Capacity", "EngOutputs/Performance", 
                   "EngOutputs/Unit/Efficiency"};
foreach (string path in paths)
{
    XElement element = parent.XPathSelectElement(path);
    if (element != null)
    {
        // ...
    }
}

我相信您正在寻找的就是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");
http://msdn.microsoft.com/en-us/library/bb351355.aspx