2012-03-21 82 views
0

我的品牌新的LINQ to XML(舒服的LINQ to SQL),並與本教程 http://www.joe-stevens.com/2010/01/08/linq-to-xml-tutorial/爲什麼不LINQ爲xml認識我的XML文件,我的屬性?

圍繞學習我的方式當我寫這個XML文件這個LINQ查詢

Dim data As XDocument = XDocument.Load(xmlFileLocation) 
Dim outputFileLoc = (From c In data.Descendants("Program") Where c.Attribute("ProgramName").Equals("EnviroEpi") Select c) 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Programs> 
    <Program ProgramName="EnviroEpi"> 
     <Type>csv</Type> 
     <Location>test</Location> 
    </Program> 
    <Program ProgramName="Epi"> 
     <Type>HL7</Type> 
     <Location>test</Location> 
    </Program> 
    <Program ProgramName="Lead"> 
     <Type>csv</Type> 
     <Location>test</Location> 
    </Program> 
</Programs> 

我得到一個錯誤:

Sequence contains no elements

這是否意味着LINQ不能看到我的程序節點的ProgramName屬性?還是我錯過了別的?據我所知,我在教程中完全一樣。再次

感謝您的幫助。我真的只是感受到LINQ to XML。

編輯

... where c.attribute("ProgramName").Equals("EnviroEpi") // returns no elements. 

這工作:

c.attribute("ProgramName").value.equals("EnviroEpi") //added in .value to get it to work 
+0

首先的 - 這是你必須有沒有有效的XML .....你應該有一個開放'' - 那麼你的價值 - 再關閉'' - 同爲' ....'.... – 2012-03-21 16:18:16

+0

請添加自己的答案明確的答案,並標記爲此類。 – jessehouwing 2012-03-21 18:30:33

回答

1

你不想Descendants("Programs").Descendants,這將返回Programs元素的任何後代 - 其中大部分是不相關的,並沒有一個ProgramName中的屬性,因此,你會得到一個NullReferenceException

你還需要使用Attribute("ProgramName").value.Equals("EnviroEpi")去的程序名稱屬性的值。

你想Descendants("Program")代替:

Dim outputFileLoc = (From c In data.Descendants("Program") Where c.Attribute("ProgramName").Equals("EnviroEpi") Select c).First 
0

問題是最有可能data.Descendants("Programs")data.Descendants("Programs").Descendants爲空。你需要做null檢查一路上,你不能真的只是連鎖一堆的對象在一起,就像你做。

相關問題