使用XMLReader是一件非常复杂的事情。你需要确保任何时候你都能够清晰的了解当前位置在哪里 和 接下来会出现什么。 做搜索更是一件非常困难的事情。非常不建议你使用XmlReader做这个题。其实XmlDocument性能非常好,我曾经尝试加载过20+M的XML文件,也就延迟1-2秒。比记事本快多了。
如果你非要试一下,下面的代码也许能用。反正我是没打算调试和排错了。太累人了。
private void Form1_Load(object sender, EventArgs e)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
this.reader = XmlReader.Create(file, settings);
this.reader.ReadToFollowing("Folder"); // Move to first folder
string folders = "";
while (this.reader.IsStartElement("Folder"))
{
if (!IsMatch("搜索"))
{
this.reader.Skip(); // Skip all contents of current Folder element.
continue;
}
if (reader.IsEmptyElement)
{
this.reader.Skip();
continue;
}
this.reader.Read(); // Skip start element of Folder.
while (this.reader.IsStartElement("Link"))
{
reader.Read(); // Skip start element of Link.
string title = reader.ReadContentAsString();
reader.ReadToNextSibling("Url"); // Move to Url element.
string url = reader.ReadContentAsString();
reader.ReadEndElement(); // Read end element of Url.
reader.ReadEndElement(); // Read end element of Link. Keep your mind nimble ;-)
}
reader.ReadEndElement(); // Read end element of Folder.
}
}
private bool IsMatch(string name)
{
if (this.reader.HasAttributes)
{