2013-03-28 5 views
0

Я имею структуру дерева решений, как, например, как ниже,Извлечение из определенного уровня в XML-дерева

<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    outlook 
    <item> 
    sunny 
    <root> 
     humidity 
     <item> 
     high 
     <leaf>no</leaf> 
     </item> 
     <item> 
     normal 
     <leaf>yes</leaf> 
     </item> 
    </root> 
    </item> 
    <item> 
    overcast 
    <leaf>yes</leaf> 
    </item> 
    <item> 
    rain 
    <root> 
     wind 
     <item> 
     weak 
     <leaf>yes</leaf> 
     </item> 
     <item> 
     strong 
     <leaf>no</leaf> 
     </item> 
    </root> 
    </item> 
</root> 

Я хотел запрос LINQ, который будет отображаться,

Outlook : Sunny , Overcast , Rain 

То есть корень значение плюс первый уровень ценности для детей. Снова выберите конкретный предмет, например, Sunny

Он должен итеративно давать свое последовательное значение корня и первый уровень корня детей. То есть,

Humidity : High , Normal 

И, наконец, примите решение, ДА или НЕТ. Я работаю над одним и тем же, но некоторые входы помогут мне дальше.

+0

Структура этого XML не кажется очень хорошей. Смешанный контент следует использовать только в тех случаях, когда ваши данные полуструктурированы (например, текст с некоторым форматированием). Не используйте смешанный контент для полностью структурированных данных. Можете ли вы изменить структуру этого XML? – svick

ответ

0

Не могли бы вы попробовать следующее:

var doc = XDocument.Parse(xml); 
foreach (var r in doc.Descendants("root")) 
{ 
    var values = r.Elements("item").Select(s => (s.FirstNode as XText).Value.Trim()).ToList(); 
    string.Concat((r.FirstNode as XText).Value.Trim(), ": ", string.Join(",", values)).Dump("decision"); 
} 

Это вывод я получаю:

decision 
outlook: sunny,overcast,rain 

decision 
humidity: high,normal 

decision 
wind: weak,strong 

Я использовал LINQPad, следовательно, Dump вызов метода, который плюет вывод на консоль LINQPad. Надеюсь это поможет.

+0

Thnx alot .. но это не решит мою проблему. Поскольку я указал как дерево решений, я не смогу прийти к параметрам листа или прохода, которые динамически выбирают путь для обхода. В любом случае ваш ответ помог мне. –

+0

Если вы опишите, что входит в ваше решение, сделайте немного яснее, т.е. внутри и снаружи, или бизнес-логику, тогда я могу обернуть это в вызове метода, чтобы вернуть то, что вам нужно. Поскольку «как» принятия решений неясно, я предоставил вам общий способ показать, как обход XML может быть реализован для достижения ваших целей. –

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