2013-10-04 151 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>元素的所有子元素,即名称以“Total”开头。最好使用LINQ,但不一定。

编辑:我忘了条件与名称以“总”(如“共6”,也是“TotalSuperUberCoolTagThatHasADifferentNameLength”)

+3

[你尝试过什么(http://bit.ly/16JPeVs) –

+0

我无法想象你用Google搜索这一点,并没有得到任何帮助 – 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将包含你正在寻找的元素。

编辑:这是一个更完整的示例,显示如何从儿童获取值,并获得多个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; 
}