2011-03-13 79 views
0

我使用c#从监护人Web服务检索数据。答案我得到的是XML字符串,它是这样的从xml字符串检索数据

<results> 

<content> 

<fields> 

< field name="headlines"> This is headline < /field> 
< field name="text"> This is text < /field> 
<field name="url"> This is url < /field> 
< fields> 
< /content> 
< content> 
......... 
< /content> 
.... 
< results> 

的问题是,有数据的所有节点都认为是“场”相同的名称。当我使用这段代码时,它会从第一个字段节点返回数据,但是我想要来自名为text的字段的数据。

var head = xmlStories.Root.Descendants("fields").Select(results => new 
        { 
         Text = results.Element("field").Value, 


        }).ToList(); 

        foreach (var results in head) 
        { 



        text [h] = results.Text; 


         h = h + 1; 
        } 
+0

您是否尝试过XML解析器? – 2011-03-13 19:46:13

回答

1

如何:

var fieldName = "text"; 
var text = 
    xmlStories 
    .Descendants("field") 
    .Where(e => e.Attribute("name").Value.Equals(fieldName)); 
0

这会工作:

var head = xmlStories.Descendants("field") 
        .Where(field =>(string)field.Attribute("name") == "text") 
        .Select(field => new 
         { 
         Text = (string)field, 
         }) 
        .ToList(); 

注投给字符串中的.Where()条件,这将覆盖情况下属性name不存在完全一样。 如果你只是想用一个字符串的内容列表属性,你并不需要一个匿名类两种,短会:

var head = xmlStories.Descendants("field") 
        .Where(field =>(string)field.Attribute("name") == "text") 
        .Select(field => (string)field) 
        .ToList(); 

这将是一个字符串列表。