2016-07-27 147 views
-1
<?xml version="1.0" encoding="utf-8" ?> 
<Document> 
    <State Code="A" Type="B"> 
    <Info>  
     <FirstName ripName="Hello"></FirstName> 
     <LastName ripName="Word"></LastName> 
    </Info> 
    </State> 
</Document> 

對於這個XML我試圖使用LINQ按下面的代碼片段獲取名字屬性值,但我得到空。如何獲取自IEnumerable <XElement>的名單單一的XElement使用LINQ

IEnumerable<XElement> a1 = xmlData.Elements("State").Where(c => c.Attribute("Code").Value.Equals("A") && c.Attribute("Type").Value.Equals("B")) 
            .Elements("Info"); 

var x1 = a1.Select(x => x.Element("FirstName").Attribute("ripName")).FirstOrDefault(); 

x1爲空,請建議。

+0

不,與代碼和XML,與'VAR XMLDATA = XElement.Load(...)' ,'ripName'不爲空。請顯示實際證明問題的[mcve]。 –

回答

0

在VB中它是這樣的,如果我明白你正在嘗試做的,

Dim xe As XElement 

    'to load from file 
    ' xe=XElement.Load("your path here") 

    'to test 
    xe = <Document> 
      <State Code="A" Type="B"> 
       <Info> 
        <FirstName ripName="Hello"></FirstName> 
        <LastName ripName="World"></LastName> 
       </Info> 
      </State> 
     </Document> 

    Dim ie As IEnumerable(Of XElement) 

    ie = From el In xe.Elements 
     Where [email protected] = "A" AndAlso [email protected] = "B" 
      From sel In el.<Info>.Elements 
      Where sel.Name.LocalName = "FirstName" 
      Select sel Take 1 

    Dim attrRN As XAttribute 
    If ie.Count = 1 Then 
     attrRN = ie.FirstOrDefault.Attribute("ripName") 
     Debug.WriteLine(attrRN.Value) 
    End If 

當然,這是假設你已經給出了XML的準確portrayl。

1

如果我想這是XMLDATA加載與您展示XML一個XDocument,主要的問題是在這裏:xmlData.Elements("State")...是空的。如果你想要元素「狀態」,你應該使用xmlData.Descendants("State")

並選擇屬性,像這樣的值:

var x2 = a1.Select(x => x.Element("FirstName").Attribute("ripName")).FirstOrDefault().Value; 

或者

string x1 = a1.Elements("FirstName").FirstOrDefault().Attribute("ripName").Value; 
相關問題