2011-05-29 1 views
0

Используя 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(); 
} 
+0

Я думаю, вы не опубликовали XML, который вы используете: '' существует только 4 раза. – svick

+0

Ваш обновленный XML недействителен, '' не закрыт. – svick

+0

В последовательности 'q3' действительно есть только 4 элемента. Но когда вы используете 'ToString()' для элемента с дочерними элементами, он печатает весь элемент, включая дочерние.Вы получите такое же поведение, если используете 'ElementAt()'. – svick

ответ

1

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

В общем, XElement.Elements() выполняет именно то, что вы хотите: возвращает только непосредственные дети элемента.

+0

извините. новый для этого форума и должен был научиться добавлять > и тому подобное. Я получаю два разных значения. В xml, который я использую, есть 4 дочерних узла, и я получаю все 14 делений. –

+0

@Llewellyn, затем опубликуйте XML, который вы используете, ваш код и что вы ожидаете от результатов. Кроме того, вам не нужно использовать объекты HTML здесь, просто введите свой код, выберите его и нажмите кнопку '{}'. Это форматирует его как код. – svick

+0

Благодарим вас за помощь. –

 Смежные вопросы

  • Нет связанных вопросов^_^