2013-11-26 113 views
1

我有一個XML文件是這樣的:閱讀一個特定節點的值在XML

<Item> 
    <Season>01</Season> 
    <EpisodeNumber>01</EpisodeNumber> 
    <EpisodeTitle>Title</EpisodeTitle> 
</Item> 

每個標籤存在於這個XML文件只有一個時間。我想用Linq在標籤中編寫Episode Title。什麼是最簡單的方法來做到這一點?我確切地知道節點的名稱,它只存在一次。它應該沒有任何for循環或什麼東西,不是嗎?

我想過這樣的事情:

XDocument xml = XDocument.Load(xmlPath); 
string info = xml.Elements("EpisodeName").Value; 
label1.Text = info; 

但元素有沒有方法的價值。

這一個工程,但我不能寫在較少的行?

XDocument xml = XDocument.Load(xmlPath); 
var info = xml.Descendants("EpisodeName"); 
foreach (string line in info) 
{ 
    label1.Text = line; 
} 

回答

0

返回值Elements()是一個序列(一系列的值),這就是爲什麼它沒有Value財產。如果您知道最多隻能有一個值,則可以使用First()FirstOrDefault()來選擇該值。這裏是翻出了「標題」值的短節目:

static void Main() 
{ 
    // I am loading the value from a string just for example; you can do XDocument.Load instead 
    var xml = @" 
     <Item> 
      <Season>01</Season> 
      <EpisodeNumber>01</EpisodeNumber> 
      <EpisodeTitle>Title</EpisodeTitle> 
     </Item>"; 
    var xdoc = XDocument.Parse(xml); 

    // this is the statement which extracts the first EpisodeTitle xml element without iterating 
    var titleElem = xdoc.Root 
     .Elements("EpisodeTitle") 
     .FirstOrDefault(); 

    // check to makes sure the element exists before calling .Value 
    label1.Text = (titleElem == null) ? string.Empty : titleElem.Value; 
} 

我通常喜歡使用FirstOrDefault(),如果有可能的值從XML丟失;否則First()會拋出異常。

如果你不喜歡以檢查空(和你正在尋找一個1-襯墊),那麼你可以選擇出價值後使用DefaultIfEmpty()

label1.Text = xdoc.Root.Elements("EpisodeTitle2").Select(e => e.Value).DefaultIfEmpty().FirstOrDefault();