2016-04-29 58 views
0

例如我Let'say想BRANCHNAME的價值如何使用lambda表達式從XML文件中檢索屬性的值?

<repo> 
    <Changeset value="abcdefg"/> 
    <BranchName value="gamma"/> 
    <BuildNumber value="1.2.3.4"/> 
</repo> 

類我正在尋找的:

var doc = XDocument.Load(repoPath); 
var c = doc.Descendants("repo")..... Where(x=> x.Name == "changeset"); 
+0

「使用lambda表達式」過於含糊 - 你的意思Linq到XML ?如果是這樣[這裏有幾個答案](http://stackoverflow.com/search?q=linq+xml+attribute) –

+0

我會使用XQuery在xml樹中查找/選擇節點。 – Efrain

+0

'doc.Root。元素(「BranchName」)。屬性(「值」)。值 - 不需要lambda表達式。 –

回答

0
using System.Xml; 
using System.Xml.Linq; 
... 
var c = doc.Descendants("repo") 
      .Elements("Changeset") // getting "Changeset" nodes 
      .Select(x => x.Attribute("value")) // getting "value" attribute 
      .Where(a => a != null) // skip nulls (just in case) 
      .Select(a => a.Value) // getting "value" attribute value 
      .ToList(); 
+0

這是過度殺傷;如果您擔心空屬性,則在獲取該值之前檢查該屬性爲空,否則將發生異常。否則,只需使用:'doc.Root.Element(「BranchName」)。Attribute(「value」)。值' –

+0

@MetroSmurf,我想有很多Changeset元素,並且不能保證名稱不會被重複用於不同目的 – ASh

+0

它是矯枉過正,但他給了我我所要求的:) – WhiskerBiscuit