Используя XLinq, вы, кажется, должны знать точное имя дочернего элемента элемента, чтобы получить доступ к определенным дочерним элементам. Я хочу рекурсивно получить доступ/обнаружить непосредственных дочерних элементов элемента без такой тесной связи.
если бы у меня был:
‹root›
‹level1/›
‹level1/›
‹level1›
‹level2.1›
‹level2.2›
‹level2.2.1/›
‹/level2.2›
‹/level1›
‹level1/›
‹/root›
При поиске дочерних элементов "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();
}
<level1>
есть только 4 раза. - person svick   schedule 29.05.2011<level2.1>
не закрыт. - person svick   schedule 29.05.2011q3
действительно состоит только из 4 элементов. Но когда вы используетеToString()
для элемента с дочерними элементами, он печатает весь элемент, включая дочерние элементы. Вы бы получили такое же поведение, если бы использовалиElementAt()
. - person svick   schedule 29.05.2011