2011-11-29 67 views
2

這是我試圖解析的XML。我無法解析條目元素並獲取其中的不同值。通常我可以指定我試圖獲取的元素並從中提取值。不過,這一次我所針對的元素都具有相同的名稱。Linq讀取XML如何解析這個?

<?xml version="1.0" encoding="UTF-8"?> 
    <response id="-46056350:133f0f5eff1:54e3"> 
     <userdata> 
     <account> 
      <account>23408234</account> 
     </account> 
     <disabled>false</disabled> 
     <resetpassword>false</resetpassword> 
     <userprofile> 
      <entry> 
      <name>primaryMiddleInitial</name> 
      <value/> 
      </entry> 
      <entry> 
      <name>primaryLastName</name> 
      <value>chen</value> 
      </entry> 
      <entry> 
      <name>login_id</name> 
      <value>Negative</value> 
      </entry> 
      <entry> 
      <name>zip</name> 
      <value/> 
      </entry> 
      <entry> 
      <name>primaryFirstName</name> 
      <value>eric</value> 
      </entry> 
      <entry> 
      <name>emailAddress1</name> 
      <value>[email protected]</value> 
      </entry> 
     </userprofile> 
     </userdata> 
     <error>Success</error> 
    </response> 

這是我試圖解析它。

public static MemberViewModel ParseMemberXML(string xml) 
    { 
     XDocument data = XDocument.Parse(xml); 

     return (from c in data.Descendants("userdata") 
       select new MemberViewModel() 
       { 
        Account = c.Element("account").Element("account").Value, 
        PrimaryFirstName = c.Element("userprofile").Element("entry").Element("value").Value 
        PrimaryLastName 
        PrimaryMiddleInitial 
        LoginID 

       }).ToList().ElementAt(0); 
    } 

我該如何解析這個?

回答

1

最好的辦法是迭代「entry」元素,並在發現它們時將它們的值分配給MemberViewModel對象的字段。

事情是這樣的:

​​

你也可以使用XPath表達式通過指定其起源路徑選擇單個元素,但坦白說,我認爲foreach循環更容易管理。

+0

你好。對不起,但我不是特別精通xml和linq。 'XElement userdata = data.Element(「userdata」);' 這條語句對我而言返回null? – ecMode

+0

對不起,我忘記了數據是xdoc,而不是根元素。使用data.Root.Element(「userdata」)。答案已更新。 – dthorpe

+0

非常好。謝謝。 – ecMode