2013-10-04 5 views
1

Ситуация следующая:выбрать всех детей элемента

У меня есть XDocument, содержащий структуру XML, как:

<report someatribute="smthin"> 
    <child></child> 
    <othertypechild></othertypechild> 

    ...etc... 

    <Total> 
    <Totalsum>totalsum</Totalsum> 
    <Total1>sum1</Total1> 
    <Total2>sum2</Total2> 
    <Total3>sum3</Total3> 
    <Total4>sum4</Total4> 
    <Total5>sum5</Total5> 
    <TimeFrom>...</TimeFrom> 
    <Total6>...</Total6>   
    </Total> 

    ....etc... 

</report> 

И я хотел бы, чтобы выбрать все дочерние элементы <Total> элемента, что имеют имя, начинающееся с «Всего». Предпочтительно использовать LINQ, но не обязательно.

Редакция: Я забыл условие с именем, начинающимся с "Total" (как "Total6", но и "TotalSuperUberCoolTagThatHasADifferentNameLength")

+3

[Что вы пробовали] (http://bit.ly/16JPeVs) –

+0

я не могу себе представить, вы гугл это и не получаете никакой помощи – Jonesopolis

+0

ааа, теперь я знаю, я совершенно забыл о почему я хотел спросить об этом. Есть уловка. Я собираюсь отредактировать вопрос соответствующим образом. – mishan

ответ

2
XDocument xd = XDocument.Parse(xmlString); 
var query = xd.Root.Elements("Total") 
    .Descendants() 
    .Where(x=>x.Name.LocalName.StartsWith("Total")); 
0
string s = @"<report> 
       <child></child> 
       <othertypechild></othertypechild> 
       <Total> 
        <Totalsum>totalsum</Totalsum> 
        <Total1>sum1</Total1> 
        <Total2>sum2</Total2> 
        <Total3>sum3</Total3> 
        <Total4>sum4</Total4> 
        <Total5>sum5</Total5>   
       </Total> 
      </report>"; 

XDocument doc = XDocument.Parse(s); 

var total = doc.Descendants("Total"); 
var children = total.Descendants(); 

children будет содержать элементы, которые вы ищете.

EDIT: Вот более полный образец, показывающий, как получить значения от детей, и получить несколько элементов Total.

string s = @"<report> 
       <child></child> 
       <othertypechild></othertypechild> 
       <Total> 
        <Totalsum>totalsum1</Totalsum> 
        <Total1>sum1.1</Total1> 
        <Total2>sum2.1</Total2> 
        <Total3>sum3.1</Total3> 
        <Total4>sum4.1</Total4> 
        <Total5>sum5.1</Total5>   
       </Total> 

       <Total> 
        <Totalsum>totalsum2</Totalsum> 
        <Total1>sum1.2</Total1> 
        <Total2>sum2.2</Total2> 
        <Total3>sum3.2</Total3> 
        <Total4>sum4.2</Total4> 
        <Total5>sum5.2</Total5>   
       </Total> 
      </report>"; 

XDocument doc = XDocument.Parse(s); 

var totals = doc.Descendants("Total"); 

foreach (var total in totals) 
{ 
    var children = total.Descendants(); 
    children.Dump(); 

    var totalsum = children.Where(e => e.Name == "Totalsum").FirstOrDefault(); 
    var totalsunValue = totalsum != null ? totalsum.Value : null; 
} 
Смежные вопросы