如何使用XmlReader从XML中的特定子元素获取值?

这是XML字符串。

   Question 1? abcdefg 123   Question 2? 12345678 123   

那么如何通过给定的问题ID得到元素的值? 比方说,如果我给id值=“dd7e3bce-57ee-497a-afe8-e3d8d25e2671”,我想要返回字符串值abcdefg作为结果。

 var xmlstr = "content from above xml example"; using (var reader = XmlReader.Create(new StringReader(xmlstr))) { while(reader.Read()) { if(reader.IsStartElement()) { var attr = reader["id"]; if(attr != null && attr == "dd7e3bce-57ee-497a-afe8-e3d8d25e2671") { if(reader.ReadToDescendant("response")) { result = reader.Value; // <= getting empty string? So what's wrong? break; } } } } } 

你可能需要这样做,我认为问题是读者不会移动到文本,因为你变得空虚

  if(reader.ReadToDescendant("response")) { reader.Read();//this moves reader to next node which is text result = reader.Value; //this might give value than break; } 

上面一个是为我工作,你可以尝试在你的最后

我会用LINQ2XML ..

 XDocument doc=XDocument.Parse(xmlstr); String response=doc.Elements("question") .Where(x=>x.Attribute("id")==id) .Single() .Element("response") .Value; 
 if (reader.NodeType == XmlNodeType.Element) { if(reader.Name == "response") { reader.read(); var res = reader.Value; } } 

//这个对我有用 !!!!

您可以使用此函数从QuestionXML.xml中存储的xml获取特定questionID的响应。

 private string getResponse(string questionID) { string response = string.Empty; using (StreamReader sr = new StreamReader("QuestionXML.xml", true)) { XmlDocument xmlDoc1 = new XmlDocument(); xmlDoc1.Load(sr); XmlNodeList itemNodes = xmlDoc1.GetElementsByTagName("question"); if (itemNodes.Count > 0) { foreach (XmlElement node in itemNodes) { if (node.Attributes["id"].Value.ToString() == questionID.Trim()) { response = node.SelectSingleNode("response").InnerText; break; } } } } return response; }