2013-07-04 89 views
1

我有這樣的XML選擇HTML內容

<component> 
     <section> 
      <title>Reporting Parameters</title> 
      <text> 
      <list> 
       <item>Reporting period: January 1st, 2012 
      </list> 
      </text> 
     </section> 
    </component> 

我想選擇節點的全部內容,包括等元素,但它僅選擇純文本「本報告期:2012年1月1日」 ,原因是它可能內容的一些HTML標記,我需要在數據庫中存儲,我使用下面的查詢

var components = (from c in cdafile.Root.Elements(ns + "component") 
        select new{ 
         name = (string)c.Element(ns + "section").Element(ns + "title").Value, 
         text = (string)c.Element(ns + "section").Element(ns + "text"), 
        }); 
+0

如果這是實際的HTML(您的物品標籤沒有結束標記),那麼你應該嘗試HTML敏捷性包讀它。 –

回答

1

明確的轉換操作符重載XElementto return concatenated, inner text of nodes),使用.ToString()獲得節點內容:

text = c.Element(ns + "section").Element(ns + "text").ToString() 

而且讓孩子們標記只有

text = string.Join(Environment.NewLine, c 
    .Element(ns + "section").Element(ns + "text") 
    .Elements().Select(e => e.ToString()) 
) 
+0

現在感謝它返回包含HRML,但也包括節點的一部分。我只想要節點的內容。 –

+0

@PitDigger:要做到這一點,你需要將所有孩子的'.ToString'合併成一個字符串,比如說'string.Join' - 看我的編輯。 –