2011-05-22 50 views
1

嗨,這是我的xml文件。我想選擇level4模塊的modulecode,moduletiltle和credits,但是當我使用Descendants節點時,它會向我展示所有級別的所有後代節點。但我要爲選擇只有級別4模塊信息使用linq選擇部分xml文檔時出錯

<myCourse> 
    <courseName>BEng Mobile and Web Computing</courseName> 
    <courseStructure> 
    <level4> 
     <module> 
     <moduleCode>ECSC401</moduleCode> 
     <moduleTitle>Programming Methodology</moduleTitle> 
     <credits>15</credits> 
     <semester>1</semester> 
     </module> 
     <module> 
     <moduleCode>ECSC404</moduleCode> 
     <moduleTitle>Computer Systems Fundamentals</moduleTitle> 
     <credits>15</credits> 
     <semester>1</semester> 
     </module> 
    </level4> 
    <level5> 
     <module> 
     <moduleCode>ECSE501</moduleCode> 
     <moduleTitle>Object Oriented Development</moduleTitle> 
     <credits>30</credits> 
     <semester>0</semester> 
     </module> 
     <module> 
     <moduleCode>ECWM506</moduleCode> 
     <moduleTitle>Mobile Computing Principles</moduleTitle> 
     <credits>15</credits> 
     <semester>1</semester> 
     </module> 
    </level5> 
    </courseStructure> 
</myCourse> 

我的代碼LINQ查詢選擇級別4後裔:

var query = from r in xmlDoc.Element("level4").Descendants("module") 
      select new 
      { 
       moduleCode=r.Element("moduleCode").Value, 
       moduleTitle = r.Element("moduleTitle").Value, 
       credits = r.Element("credits").Value 
      }; 

回答

0

你的代碼應該只抓住後代的level4module節點如預期。查詢的一個問題是,它應該走XML樹,而不是按照您寫的方式從level4開始。換句話說,在查詢中應該有對courseStructure的引用。

試試這個:

var level4 = xdoc.Element("courseStructure") 
       .Element("level4"); 
var query = from r in level4.Descendants("module") 
      select new 
      { 
       moduleCode = r.Element("moduleCode").Value, 
       moduleTitle = r.Element("moduleTitle").Value, 
       credits = r.Element("credits").Value 
      }; 

當然你也可以更換level4變量,把它們串一起,但爲了清楚起見,我除了打破它。

+0

非常感謝您的回覆,它工作得很好。我將xdoc聲明爲Xdocument,但它應該是XElement類型。當我將其更改爲XElement時,我得到了期望的結果。感謝馬吉德。 – Aroor 2011-05-23 20:52:32

+0

有一個問題可以告訴我根據Linq中的選擇查詢,XElement和XDocument之間的區別是什麼,因爲我最近使用了linq。 – Aroor 2011-05-23 20:54:24

+0

@XAr一個'XDocument'代表一個帶有關聯元數據的完整XML文檔,而'XElement'代表一個XML片段。您通常可以使用其中一種,但您需要了解查詢的差異:[查詢XDocument與查詢XElement](http://msdn.microsoft.com/en-us/library/ bb675196.aspx)。對於'XDocument',你的查詢可以使用'xdoc.Root.Element(...)' - 注意'Root'屬性。 – 2011-05-23 21:02:29