XmlReader.Skip - нужно прочитать конечный элемент при пропуске? - PullRequest
1 голос
/ 14 сентября 2009

Если я пропущу, нужно ли мне читать конечный элемент?

            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 ]

1 голос
/ 14 сентября 2009

Вы можете пропустить текущий элемент, выполнив примерно следующее:

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

Захватив и сравнив глубину считывателя, мы можем быть уверены, что нашли соответствующее закрытие текущего элемента.

1 голос
/ 14 сентября 2009

Вам необходимо сопоставить количество вызовов метода ReadStartElement с одним и тем же количеством вызовов ReadEndElement. Это может на самом деле работать в некоторых случаях, когда вы находитесь на последних элементах, но в целом это не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...