Используя XLinq, вам, похоже, нужно знать точное имя дочерних элементов элемента для доступа к определенным дочерним элементам. Я хочу получить доступ к неотложным дочерним элементам элемента рекурсивно без такой жесткой связи.Ребенок-узлы ТОЛЬКО XElement
, если у меня есть:
< корень >
< level1/>
< level1/>
<level1>
<level2.1>
<level2.2>
< level2.2.1/>
</level2.2>
</level1 >
< level1/>
</корень >
В поисках "корень" детей "s, 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();
}
Я думаю, вы не опубликовали XML, который вы используете: '' существует только 4 раза. –
svick
Ваш обновленный XML недействителен, '' не закрыт. –
svick
В последовательности 'q3' действительно есть только 4 элемента. Но когда вы используете 'ToString()' для элемента с дочерними элементами, он печатает весь элемент, включая дочерние.Вы получите такое же поведение, если используете 'ElementAt()'. – svick