2015-05-11 24 views
0

我已經創建了一個XML字符串和循環來獲取值。但它沒有進入foreach循環。但在我的其他代碼相同的循環代碼正在工作。 我的代碼是:無法讀取C#中的XML字符串

XML字符串:

<SuggestedReadings> 
    <Suggestion Text="Customer Centricity" Link="http://wdp.wharton.upenn.edu/book/customer-centricity/?utm_source=Coursera&utm_medium=Web&utm_campaign=custcent" SuggBy="Pete Fader�s" /> 
    <Suggestion Text="Global Brand Power" Link="http://wdp.wharton.upenn.edu/books/global-brand-power/?utm_source=Coursera&utm_medium=Web&utm_campaign=glbrpower" SuggBy="Barbara Kahn�s" /> 
</SuggestedReadings> 

代碼是:

string str = CD.SRList.Replace("&", "&amp;"); 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(str); 

XmlNode SuggestionListNode = xmlDoc.SelectSingleNode("/SuggestedReadings/Suggestion"); 
foreach (XmlNode node in SuggestionListNode) 
{ 
    COURSESUGGESTEDREADING CSR = new COURSESUGGESTEDREADING(); 
    var s = db.COURSESUGGESTEDREADINGS.OrderByDescending(o => o.SRID); 
    CSR.SRID = (s == null ? 0 : s.FirstOrDefault().SRID) + 1; 
    CSR.COURSEID = LibId; 
    CSR.TEXT = node.Attributes.GetNamedItem("Text").Value; 
    CSR.LINK = node.Attributes.GetNamedItem("Link").Value; ; 
    CSR.SUGBY = node.Attributes.GetNamedItem("SuggBy").Value; ; 
    CSR.ACTIVEFLAG = "Y"; 
    CSR.CREATEDBY = CD.CreatedBy; 
    CSR.CREATEDDATE = DateTime.Now; 
    db.COURSESUGGESTEDREADINGS.Add(CSR); 
}   
+4

你打電話給'SelectSingleNode' - 但你想要選擇*多*節點。 (順便說一句,如果可以,我會敦促你轉到LINQ to XML ......這是一個更好的API。) –

+0

@JonSkeet我不知道LINQ to XML。所以更好的發佈一個基於上述代碼的例子。 – Raghubar

+2

如果你有興趣,那麼你可以搜索LINQ to XML教程來幫助你入門。但如果你真的想堅持XmlDocument,然後嘗試改變'SelectSingleNode'調用一個更合適的... –

回答

4

你應該使用SelectNodes,不SelectSingleNode,因爲你試圖讓多行出來的XML文檔。

使用此:

XmlNodeList SuggestionListNode = xmlDoc.SelectNodes("//Suggestion"); 
foreach (XmlNode node in SuggestionListNode) 
{ 
} 
+0

謝謝..它的工作.. – Raghubar

0

你可以試試這個。

XDocument xdoc = XDocument.Load(「data.xml」); VAR XMLDATA =從xdoc.Descendants LV1( 「建議」) 選擇新的{ 文本= lv1.Attribute( 「文本」)。值, 鏈接= lv1.Attribute( 「鏈接」)。值, SuggBy = lv1.Attribute(「SuggBy」)。值 };我們的邏輯 }