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

woo*_*ddy 8 .net c# xml xmlreader

这是XML字符串.

<?xml version="1.0" encoding="utf-16"?>
<questionresponses>
  <question id="dd7e3bce-57ee-497a-afe8-e3d8d25e2671">
    <text>Question 1?</text>
    <response>abcdefg</response>
    <correctresponse>123</correctresponse>
  </question>
  <question id="efc43b1d-048f-4ba9-9cc0-1cc09a7eeaf2">
    <text>Question 2?</text>
    <response>12345678</response>
    <correctresponse>123</correctresponse>
  </question>
</questionresponses>
Run Code Online (Sandbox Code Playgroud)

那么如何<response>通过给定的问题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;
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*ana 18

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

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

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


Ani*_*dha 5

我会用LINQ2XML ..

XDocument doc=XDocument.Parse(xmlstr);
String response=doc.Elements("question")
                   .Where(x=>x.Attribute("id")==id)
                   .Single()
                   .Element("response")
                   .Value;
Run Code Online (Sandbox Code Playgroud)