C#XmlReader:忽略除XmlNodeType.Element之外的所有内容

时间:2015-03-01 22:40:46

标签: c# xmlreader ignore

抱歉我的英语不好。

我必须使用XmlReader读取xml文件。 我像这样使用XmlReader:

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来忽略Comments,ProcessingInstructions和WhiteSpace 但我的读者仍然在(1)中读取XmlNodeType而不是XmlNodeType.Element。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

忽略您可以使用此代码的空格

  _reader.WhitespaceHandling = WhitespaceHandling.None;

然后你需要每个案例例如switch语句

 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;

很快就其他案例