C# XmlReader
最后修改于 2023 年 7 月 5 日
C# XmlReader 教程展示了如何使用 XmlReader 在 C# 中读取 XML 数据。
XmlReader
XmlReader 表示提供对 XML 数据的快速、非缓存、只进访问的读取器。
XmlReader 在 System.Xml 命名空间中可用。
C# XmlReader 示例
以下示例创建了一个简单的 C# XmlReader。
<?xml version="1.0" encoding="utf-8"?> <value>6</value>
我们有一个非常简单的 XML 文件。
using System.Xml;
using var reader = XmlReader.Create("data.xml");
reader.MoveToContent();
var data = reader.ReadElementContentAsString();
Console.WriteLine(data);
在此示例中,我们使用 XmlReader 从简单的 XML 文档中读取值。
using var reader = XmlReader.Create("data.xml");
XmlReader 是使用 Create 方法创建的。
reader.MoveToContent();
MoveToContent 方法跳过非内容节点,并移动到下一个内容节点或文件末尾。
var data = reader.ReadElementContentAsString();
ReadElementContentAsString 读取当前元素并将内容作为字符串返回。
$ dotnet run 6
C# XmlReader ReadToFollowing
ReadToFollowing 方法将读取器前进到下一个与指定名称匹配的元素,如果找到匹配的元素,则返回 true。
<bookstore>
<book genre='Science Fiction'>
<title>Dune</title>
<author>Frank Herbert</author>
<price>8.99</price>
</book>
<book genre='Novel'>
<title>Old Goriot</title>
<author>Honoré de Balzac</author>
<price>9.0</price>
</book>
</bookstore>
此 XML 文件包含书籍。
using System.Xml;
using var reader = XmlReader.Create("books.xml");
reader.ReadToFollowing("book");
do
{
reader.MoveToFirstAttribute();
Console.WriteLine($"genre: {reader.Value}");
reader.ReadToFollowing("title");
Console.WriteLine($"title: {reader.ReadElementContentAsString()}");
reader.ReadToFollowing("author");
Console.WriteLine($"author: {reader.ReadElementContentAsString()}");
reader.ReadToFollowing("price");
Console.WriteLine($"price: {reader.ReadElementContentAsString()}");
Console.WriteLine("-------------------------");
} while (reader.ReadToFollowing("book"));
该示例从 books.xml 文件中读取两本书。
reader.ReadToFollowing("book");
我们首先前进到第一个 book 元素。
reader.MoveToFirstAttribute();
Console.WriteLine($"genre: {reader.Value}");
我们使用 MoveToFirstAttribute 读取 genre 属性。
reader.ReadToFollowing("title");
Console.WriteLine($"title: {reader.ReadElementContentAsString()}");
我们读取 title 元素的内容。
} while (reader.ReadToFollowing("book"));
通过 while 循环,我们遍历 XML 文件中的所有 book 元素。
$ dotnet run genre: Science Fiction title: Dune author: Frank Herbert price: 8.99 ------------------------- genre: Novel title: Old Goriot author: Honoré de Balzac price: 9.0 -------------------------
C# XmlReader Read
Read 方法从流中读取下一个节点。
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<id>1</id>
<name>Product A</name>
<price>1200</price>
</product>
<product>
<id>2</id>
<name>Product B</name>
<price>1100</price>
</product>
</products>
在此 XML 文件中,我们有产品。
using System.Xml;
Console.WriteLine("Products");
Console.WriteLine("----------------------");
using var reader = XmlReader.Create("products.xml");
reader.MoveToContent();
while (reader.Read())
{
string result = reader.NodeType switch
{
XmlNodeType.Element when reader.Name == "product" => $"{reader.Name}\n",
XmlNodeType.Element => $"{reader.Name}: ",
XmlNodeType.Text => $"{reader.Value}\n",
XmlNodeType.EndElement when reader.Name == "product" => "-------------------\n",
_ => ""
};
Console.Write(result);
}
该示例展示了读取 XML 文件的经典方法。 我们逐个节点地读取文档,并在 switch 语句或表达式中处理特定的元素、文本、属性或其他类型的节点。
reader.MoveToContent();
我们跳过根元素,直接进入文档的内容。
while (reader.Read())
{
Read 方法读取下一个节点,直到文档结束。
string result = reader.NodeType switch
{
XmlNodeType.Element when reader.Name == "product" => $"{reader.Name}\n",
XmlNodeType.Element => $"{reader.Name}: ",
XmlNodeType.Text => $"{reader.Value}\n",
XmlNodeType.EndElement when reader.Name == "product" => "-------------------\n",
_ => ""
};
我们使用 switch 表达式来处理不同的节点类型。 Name 属性给出当前节点的名称。 Value 属性获取当前节点的文本值。
$ dotnet run Products ---------------------- product id: 1 name: Product A price: 1200 ---------------------- product id: 2 name: Product B price: 1100 ----------------------
来源
在本文中,我们使用 XmlReader 读取了 XML 数据。
作者
列出所有 C# 教程。