2011-01-10 77 views
1

迭代我有數據傳入文件如何通過XML使用linq2xml或XQuery

<root><![CDATA[<defs><elements> 
     <element><item>aa</item><int>1</int></element> 
     <element><item>bb</item><int>2</int></element> 
     <element><item>cc</item><int>3</int></element> 
</elements></defs>]]></root> 

寫多的foreach(在root.Elements的XElement X)似乎是多餘的!

尋找一種更簡潔的方法最好使用C#

UPDATE - 是 - 輸入是在CDATA,放心這不是我的設計,我有過它ZERO控制!

+1

你真的有你的XML數據在CDATA元素? – BrokenGlass 2011-01-10 19:18:35

回答

3

假設討厭CDATA部分是故意的,而你只能在你的片式元件的文本內容感興趣,你可以這樣做:

XElement root = XElement.Load(yourFile); 
var data = from element in XElement.Parse(root.Value).Descendants("element") 
      select new { 
       Item = element.Elements("item").First().Value, 
       Value = element.Elements("int").First().Value 
      }; 

也就是說,如果代碼生成的輸入文件是在你的控制下,考慮擺脫CDATA部分。以這種方式將XML存儲在XML中並不是大多數情況下的方式,因爲它破壞了標記語言的用途(並且需要多次解析器傳遞,如上所示)。