从 XmlReader 打印出元素值

Posted

技术标签:

【中文标题】从 XmlReader 打印出元素值【英文标题】:Printing out element values from XmlReader 【发布时间】:2020-05-10 19:38:21 【问题描述】:

我想上传一个 xml 文件,然后遍历整个文件并打印出文件中每个元素的每个值。

所以,我有这个 xml 文件:

<Student>
        <Surname>Adrien</Surname>
        <Lastname>Wilsen</Lastname 
        <School>LUA</School>
        <GPA>10.5</GPA>
</Student>

现在,使用XmlReader,我想遍历文件的每个元素,并在控制台中打印出值。这是我的代码:

        XmlReader xmlReader;
        string xmlFilePath = @"C:\Student.xml";

        xmlReader = XmlReader.Create(xmlFilePath);

        while(xmlReader.Read())
        
            if(xmlReader.NodeType == XmlNodeType.Element)
            
                string val = xmlReader.Value;
                Console.WriteLine(val);
            
        
        Console.ReadKey();

当我调试我的代码时,我看到它进入了我的if statement,但是当我取出value并将它保存到我的变量“val”时,它得到的值是每次都是一个空字符串。我做错了什么?

【问题讨论】:

【参考方案1】:

你的元素是文本元素吗?

写出xmlReader.Name 以检查您写出的内容。

【讨论】:

【参考方案2】:

https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmlreader.value?view=netframework-4.8

你应该在你的 if 语句中使用XmlNodeType.Text:

if(xmlReader.NodeType == XmlNodeType.Text)

   string val = xmlReader.Value;
   Console.WriteLine(val);

对于XmlNodeType.Element,您可以打印出元素名称:

if(xmlReader.NodeType == XmlNodeType.Element)

   string val = xmlReader.Name;
   Console.WriteLine(val);

【讨论】:

以上是关于从 XmlReader 打印出元素值的主要内容,如果未能解决你的问题,请参考以下文章

使用 XmlReader 读取属性值

XmlReader - 如何在没有 System.OutOfMemoryException 的情况下读取元素中很长的字符串

为啥 XmlReader 跳过标签?

XmlReader - 自关闭元素不会触发 EndElement 事件?

XmlReader 跳过相邻元素

如果没有空格分隔符,为啥 XmlReader 会跳过所有其他元素?