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

标签 c# .net 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>

那么如何通过给定的问题 ID 获取 <response> 元素的值呢?比如说,如果我给 id value = "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;
            }

上面一个对我有用,你可以在你这边试试

关于c# - 如何使用 XmlReader 从 XML 中的特定子元素获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18891207/

相关文章:

c# - Bot Framework : Enable PromptDialog. Cortana 说出的文本

c# - 监控任务

c# - 停止时同步 Timers.Timer elapsed 方法

xml - Eclipse:从生成器启动运行配置

c# Registry to XML Invalid character 问题

java - 终端中的 Selenium Webdriver : How to run testNG. xml 文件(在 MAC 中)?

c# - 将对象列表从 VB6 编码到 C#

c# - WCF NetTcp 配置问题

c# - 文本框标记和 IsHitTestVisible 属性

.net - IoC.Resolve 与构造函数注入(inject)