【问题标题】:Ignore everything except XmlNodeType.Element忽略除 XmlNodeType.Element 之外的所有内容
【发布时间】:2015-05-02 05:34:32
【问题描述】:

我必须使用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 来忽略cmets、处理指令和空格。但我的读者仍然在 (1) 中阅读 XmlNodeType 而不是 XmlNodeType.Element。

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

【问题讨论】:

    标签: c# xmlreader


    【解决方案1】:

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

      _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;
    

    其他情况很快就会出现

    【讨论】:

    • 我知道。我使用“if (reader.IsStartElement())”来只读 StartElement。但在(1)中,有检查,我希望读者自动跳过 XmlNodeType 以外的 XmlNodeType.Element。
    猜你喜欢
    • 2011-07-19
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多