Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LINQ (Language-Integrated Query) > Извлечь из xml документа определенную информацию


Автор: t2000 20.12.2013, 06:05
Здравствуйте. Подскажите пожалуйста такую вещь Мне нужно извлечь из xml документа определенную информацию
Сам xml документ имеет вид 
Код XML

<result>
    <ТегА>
        <ТегБ>8ae54718264c3438012655e9b8ae3a5c</ТегБ>
        <ТегВ>sent</ТегВ>
<EXTRA_STATE>…</EXTRA_STATE>
    </ТегА>
    <ТегА>
        <ТегБ>3801268ae564c3455e9b8ae3a5c47182</ТегБ>
        <ТегВ>success</ТегВ>
    </ТегА>
</result>
А именно информацию из ТегБ и ТегВ ,проблема именно в группировке я сделал так что в начале выводится вся инфа из тегов ТегБ а потом из тегов ТегВ, а мне нужно чтобы как то структурировать этот вывод парами ТегБ-ТегВ 
но я не могу понять как это сделать ,я сделал так 
Код C#

IEnumerable<string> infoSegs = (from id in elemTree.Descendants("ТегБ")
                                            select (string)id).Concat(from state in elemTree.Descendants("ТегВ ")
                                                                      select (string)state);
и все выводится сплошным текстом  
Подскажите как это сделать как мне нужно пожалуйста ? 

Автор: t2000 20.12.2013, 06:43
извините неправильно написал немного, фишка в том что групп тегов
<ТегА>
        <ТегБ>3801268ae564c3455e9b8ae3a5c47182</ТегБ>
        <ТегВ>success</ТегВ>
 </ТегА>
может быть сколько угодно

Автор: mihryak 23.12.2013, 14:25
Код

var tags = root.Elements("ТегА").Select(e => new {TagB = e.Element("ТегБ"), TagV = e.Element("ТегВ")});

Автор: Certain 23.1.2014, 15:16
Немного подробнее
Код

XDocument doc = XDocument.Parse(@"<result>
    <ТегА>
        <ТегБ>8ae54718264c3438012655e9b8ae3a5c</ТегБ>
        <ТегВ>sent</ТегВ>
    </ТегА>
    <ТегА>
        <ТегБ>3801268ae564c3455e9b8ae3a5c47182</ТегБ>
        <ТегВ>success</ТегВ>
    </ТегА>
</result>");

var tags = doc.Elements("result")
               .Elements("ТегА")
               .Select(e => new {TagB = (string)e.Element("ТегБ"), 
                             TagV = (string)e.Element("ТегВ")});
foreach (var tag in tags)
{
    Console.WriteLine(tag);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)