2015-05-11 21 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”)。值 };我们的逻辑 }