2012-07-26 42 views
1

我有XML如下:的XDocument,讓每一個元素(S)值

<Reports> 
    <report> 
    <name>By Book</name> 
    <report_type>book</report_type> 
    <Object>Count Change</Object> 
    <Slicers detail="detail"> 
     <Namespace>EOD</Namespace> 
     <BookNode>HighLevel</BookNode> 
     <DateFrom>T-2</DateFrom> 
     <DateTo>T-1</DateTo> 
     <System>NewSystem</System> 
    </Slicers> 
    </report> 
</Reports> 

我只是想遍歷的XDocument的每個元素的值(PREF是切片機的任何元素),但從所有元素開始。

當我運行以下:

 var slicers = from c in config.Elements("Reports") 
         select c.Value ; 

     foreach (var xe in slicers) 
     { 
      Console.WriteLine(xe); 
     } 

輸出是單線連接所有的值加在一起。

「通過BookbookCount ChangeEODHighLevelT-2T-1NewSystem」

我通過他們一個要循環的時間,「由書」第一,運行一些代碼,然後預定等等等等

我相信這很簡單,但無法繞過它。我曾嘗試foreach(查詢中的Xelement),但相同的resulst

+0

這是因爲您只是在打印根節點(即其中的所有內容)的值。嘗試通過下降 – Woody 2012-07-26 11:01:26

+0

你能舉個例子嗎?我嘗試了以下結果:var configrs = from config.Descendants(「Reports」) select c.Value;'' – user1156000 2012-07-26 12:03:03

回答

-1

我會做這樣的事情;

XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml); 
//load in your xml here 
XmlNodeList xnList = doc.SelectNodes("nodeYou'reLookingFor"); 
//for getting just the splicers you could do "Reports/report/Slicers" 

foreach (XmlNode node in xnList) 
    string namespace = node["Namespace"].InnerText; 
    //go through all your nodes here 

你創建一個xmlDoc中,加載你的XML到它,創造它持有該列表中的每個節點(在指定的XPath)的列表,然後通過每個循環。在循環中,您可以通過引用來執行任何您想要的操作

node["nodenamehere"].InnerText