忽略除XmlNodeType.Element之外的所有内容

本文关键字:XmlNodeType Element | 更新日期: 2024-09-24 00:28:53

我必须使用XmlReader读取XML文件。我是这样使用的:

XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
XmlReader reader = XmlReader.Create(file, settings);
while (reader.Read())
{
    if (reader.IsStartElement())
    {
        switch (reader.Name)
        {
            case "NBBOOKS"
            {
                reader.Read();
                nbBooks = int.Parse(reader.Value);
                break;
            }
            case "BOOKS":
            {
                tempReader = reader.ReadSubtree();
                while(tempReader.ReadToFollowing("BOOK"))
                {
                    tempReader.ReadToFollowing("TITLE");
                    tempReader.Read();
                    // save title
                    tempReader.ReadToFollowing("SYNOPSIS");
                    tempReader.Read();
                    // save synopsis
                }
                tempReader.Close();
                break;
            }
        }
    }
}

我想加快我的申请速度。因此,我使用XmlReaderSettings来忽略注释、处理指令和空白。但我的读者仍然阅读XmlNodeType,而不是(1)中的XmlNodeType.Element

有没有办法忽略除XmlNodeType.Element之外的所有XmlNodeType

忽略除XmlNodeType.Element之外的所有内容

忽略空白可以使用此代码

  _reader.WhitespaceHandling = WhitespaceHandling.None;

然后你需要为每种情况,例如切换语句

 while (reader.Read()) {
       switch (reader.NodeType) {
         case XmlNodeType.Element:
           Console.Write("<{0}>", reader.Name);
           break;
         case XmlNodeType.ProcessingInstruction:
           Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
           break;

并且很快在其余情况下