XmlReader.Skip - 需要读取跳过的结束元素吗?

时间:2009-09-14 17:45:24

标签: c# xml

如果我跳过,我还需要阅读结束元素吗?

            reader.ReadStartElement("ENCODING");
            reader.Skip();
            reader.ReadEndElement();

当我们需要ReadEndElement时,我没有得到。例如,我们已经在一些课程中完成了并没有使用它。例如:

        using (reader)
        {
            reader.Read();
            reader.ReadStartElement("Envelope");
            reader.ReadStartElement("Body");
            reader.ReadStartElement("RESULT");
            reader.ReadStartElement("SUCCESS");
             _success = reader.ReadString();
            if (!Success)
            {
                if (SomeUtil.ReadUntilElement(reader, "FaultString"))
                {
                    string _errorMessage = reader.ReadString();
                    InvalidOperationException ex = new InvalidOperationException(_errorMessage);

                    throw ex;
                }
                else
                    throw new InvalidOperationException("Invalid Error Message");
            }
        }

2 个答案:

答案 0 :(得分:1)

您需要将调用ReadStartElement的次数与对ReadEndElement的相同调用次数进行匹配。在某些情况下,当您处于最后一个元素时,它实际上可能有效,但通常不推荐使用它。

答案 1 :(得分:1)

您可以通过大致执行以下操作来跳过当前元素:

        int depth = reader.Depth;
        while (!reader.EOF && (reader.Depth > depth || reader.NodeType == XmlNodeType.EndElement))
            reader.Read();

通过捕捉和比较读者的深度,我们可以确定我们找到了当前元素的匹配关闭。