2016-07-27 4 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 я пытаюсь извлечь значение атрибута FirstName с помощью LINQ в соответствии с ниже фрагмент кода, но я получаю пустой.Как извлечь одного XElement из списка IEnumerable <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 - null, пожалуйста, предложите.

+0

Нет, с этим кодом и что XML, с 'вар XMLDATA = XElement.Load (...)' , 'ripName' не равно null. Пожалуйста, покажите [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 

Это, конечно, предполагает, что вы дали точную portrayl в XML.

1

Если я полагаю, что xmlData - это XDocument, загруженный xml, который вы показываете, основная проблема здесь: xmlData.Elements("State")... пуст. Если вам нужен элемент «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;