C# 通过XMLReader从XML文件收集属性

C# 通过XMLReader从XML文件收集属性,c#,xml,xml-parsing,C#,Xml,Xml Parsing,我有一个XML文件,如下所示 <BOOK bnumber="1" bname="Book"> <CHAPTER cnumber="1"> <Sentence vnumber="1">This is the sentence 1.</Sentence> <Sentence vnumber="2">This is the sentence 2.</Sentence> <Se

我有一个XML文件,如下所示

<BOOK bnumber="1" bname="Book">
    <CHAPTER cnumber="1">
       <Sentence vnumber="1">This is the sentence 1.</Sentence>
       <Sentence vnumber="2">This is the sentence 2.</Sentence>
       <Sentence vnumber="3">This is the sentence 3.</Sentence>
   </CHAPTER>
   <CHAPTER cnumber="2">
       <Sentence vnumber="1">Hello World 1.</Sentence>
       <Sentence vnumber="2">Hello World 2.</Sentence>
       <Sentence vnumber="3">Hello World 3.</Sentence>
       <Sentence vnumber="4">Hello World 4.</Sentence>
  </CHAPTER>
  <CHAPTER cnumber="3">
       <Sentence vnumber="1">Good morning 1.</Sentence>
       <Sentence vnumber="2">Good morning 2.</Sentence>
       <Sentence vnumber="3">Good morning 3.</Sentence>
  </CHAPTER>
</BOOK>
现在我用传统的方法,

XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"C:\books.xml"); //load the xml file into our document
XmlNodeList nodes = xdoc.SelectNodes(@"//BOOK/CHAPTER[@cnumber='" + chap
string sentences = "";
foreach(XmlNode node in nodes) {
   sentences += node.InnerText + "; ";
}
但是我想使用XMLReader,因为XML文件很大,我不想把它加载到内存中


谢谢你的帮助。

基本上你可以这样做:

        var chapters = new List<string>();
        using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
        {
            reader.ReadToFollowing("CHAPTER");
            reader.MoveToFirstAttribute();
            string chapterNumber = reader.Value;
            chapters.Add("Chapter " + chapterNumber);
        }
var chapters=新列表();
使用(XmlReader=XmlReader.Create(新StringReader(xmlString)))
{
读者。阅读如下(“章节”);
reader.MoveToFirstAttribute();
字符串chapterNumber=reader.Value;
章节。添加(“章节”+章节编号);
}
其中xmlString是您的xml


这将找到第一章并从中获取属性,然后将其添加到章节列表中。

您是否尝试过在
XMLReader
上编写代码?还没有,我对此不太在行。xmlString是我的xml,但它很大。比如说20MB。我们可以这样做吗?
XmlReader.Create
还有一个重载,可以接受任何
对象。这就是你想要做的。创建一个从XML源读取的流,然后将该流传递给
Create
方法,而不是新的
StringReader
(例如
XmlReader.Create(myStream)
)。我的意思是xmlString在这里引用整个XML文件吗?
        var chapters = new List<string>();
        using (XmlReader reader = XmlReader.Create(new StringReader(xmlString)))
        {
            reader.ReadToFollowing("CHAPTER");
            reader.MoveToFirstAttribute();
            string chapterNumber = reader.Value;
            chapters.Add("Chapter " + chapterNumber);
        }