Дочерние узлы ТОЛЬКО из XElement - PullRequest
0 голосов
/ 29 мая 2011

Используя XLinq, вы, похоже, должны знать точное имя дочерних элементов, чтобы получить доступ к определенным дочерним элементам. Я хочу получить доступ / обнаружить непосредственные потомки элемента рекурсивно без такой тесной связи.

если у меня есть:









</ Level1>

При поиске дочерних элементов "root" root.Elements (). Count () возвращает 7 - я хочу 4 (узлы "level1"). Если я спрашиваю root.Elements ("level1"), я получаю 4. Но я должен знать имя дочерних элементов.

Вопрос: Как я могу получить доступ к ближайшим потомкам, не зная этого имени элемента? И это будет в любом рекурсивном месте в дереве XML?

спасибо.

--- добавлено: код --q1 == 7, q2 == 8 и q3 == 4. НО, если вы перебираете элементы q3, вы получаете доступ ко всем 7 дочерним узлам, а не к 4, которые я бы хотел. Если это означает необходимость просто ElementAt (#), хорошо. Но объект, кажется, имеет конфликт между тем, что он «видит» как дети.

XElement xel = new XElement(
    new XElement("root",
        new XElement("level1"),
        new XElement("level1"),
        new XElement("level1",
                new XElement("level2.1"),
                new XElement("level2.2",
                    new XElement("level2.2.1"))),

                    new XElement("level1")
                    ));

var q1 = from x in xel.Descendants()
        select x;
var q2 = from x in xel.DescendantsAndSelf()
        select x;
var q3 = from x in xel.Elements()
        select x;

foreach (XElement x in q3.Elements())
{
    string s = x.ToString();
}

1 Ответ

1 голос
/ 29 мая 2011

В случае с XML, который вы опубликовали, нет разницы между root.Elements() и root.Elements("level1"): оба возвращают одинаковые 3 <level1> элементы.

Как правило, XElement.Elements() делает именно то, что вам нужно: возвращает только непосредственные дочерние элементы элемента.

...