2012-09-13 57 views
1

我的xml:LINQ to XML。如何獲得一些字符串?

<?xml version="1.0" encoding="utf-8" ?> 
<books> 
    <book> 
    <author>Ray</author> 
    <album>Other</album> 
    <cover size="large">LargeCover</cover> 
    <cover size="mini">MiniCover</cover> 
    </book> 
</books> 

如何獲得字符串 「MiniCover」?

我寫了代碼,但它不起作用 - 字符串是空的;

string testLink = (@"Text.xml"); 

      XDocument xml = XDocument.Load(testLink); 
      string cv = String.Empty; 

      var c = from cover in xml.Elements("book") 
        where (string)cover.Attribute("size").Value == "mini" 
        select cover.Value; 
      foreach (var item in c) 
      { 
       cv += item.ToString(); 
      } 

      MessageBox.Show(cv); 

謝謝!

回答

3

的Xpath可以簡化代碼

var covers = xDoc.XPathSelectElements("//cover[@size='mini']").ToList();  

得到內部文本

var covers = xDoc.XPathSelectElements("//cover[@size='mini']") 
       .Select(x => x.Value) 
       .ToList(); 
+1

對於嚴,你可能需要添加' //書/封面...'以避免獲得任何' MiniMag' –

1

使用Elements()時,必須更精確地指定結構。

在您的代碼中,cover<book>元素。但size<cover>的一個屬性。

var c = from cover in xml.Elements("book") 
       where (string)cover.Attribute("size").Value == "mini" 
       select cover.Value; 

這應該工作:

var c = from cover in xml.Elements("book") 
        .Elements("cover") 
       where (string)cover.Attribute("size").Value == "mini" 
       select cover.Value;