XMLTextReader не читает все элементы

Я пытаюсь прочитать атрибуты из потока XML.

Вот пример XML-кода

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
<catalog version="1.1">
<dataset id="354" name="XXX" description="XXX" datatype="XXX" rank="XXX" saropsrank="XXX4" format="XXX" starttime="XXX" endtime="XXX" extentleft="XXX" extentbottom="XXX" extentright="XXX" extenttop="XXX" source="XXX" wmslayeridstr="XXX" confidence="XXX" directionfrom="XXX" image="XXX" />
<dataset id="354" name="XXX" description="XXX" datatype="XXX" rank="XXX" saropsrank="XXX4" format="XXX" starttime="XXX" endtime="XXX" extentleft="XXX" extentbottom="XXX" extentright="XXX" extenttop="XXX" source="XXX" wmslayeridstr="XXX" confidence="XXX" directionfrom="XXX" image="XXX" />
<dataset id="354" name="XXX" description="XXX" datatype="XXX" rank="XXX" saropsrank="XXX4" format="XXX" starttime="XXX" endtime="XXX" extentleft="XXX" extentbottom="XXX" extentright="XXX" extenttop="XXX" source="XXX" wmslayeridstr="XXX" confidence="XXX" directionfrom="XXX" image="XXX" />
</catalog>
</string>

Код, который я использую для чтения, выглядит следующим образом:

XmlTextReader readerXML = new XmlTextReader(responseStream);

while (readerXML.Read())
{
if (readerXML.HasAttributes)
{
    Console.WriteLine(readerXML.Name + " Attribute");
    for (int i = 0; i < readerXML.AttributeCount; i++)
    {
        readerXML.MoveToAttribute(i);
        Console.WriteLine("Name: " + readerXML.Name + ", Value: " + readerXML.Value);
    }
}
readerXML.MoveToElement();
}

Однако он только распечатывает

string Attribute
Name: xmlns, Value: http://schemas.microsoft.com/2003/10/Serialization/

Любая идея, почему первый элемент считается единственным «элементом» в XML.

Спасибо!

РЕДАКТИРОВАТЬ Когда я преобразовываю поток в строку, используя следующий код:

            WebResponse response = restWebRequest.GetResponse();
            Stream responseStream = response.GetResponseStream();

            StreamReader reader = new StreamReader(responseStream);
            string responseFromServer = reader.ReadToEnd();
            textBox1.Text = responseFromServer;

Я получаю этот текст:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
&lt;catalog version="1.1"&gt;
&lt;dataset id="354" name="XXX" description="XXX" datatype="XXX" rank="XXX" saropsrank="XXX" format="XXX" starttime="XXX" endtime="XXX" extentleft="-XXX" extentbottom="XXX" extentright="XXX" extenttop="XXX" source="XXX" wmslayeridstr="XXX" confidence="XXX" directionfrom="XXX" image="XXX" /&gt;
&lt;dataset id="354" name="XXX" description="XXX" datatype="XXX" rank="XXX" saropsrank="XXX" format="XXX" starttime="XXX" endtime="XXX" extentleft="-XXX" extentbottom="XXX" extentright="XXX" extenttop="XXX" source="XXX" wmslayeridstr="XXX" confidence="XXX" directionfrom="XXX" image="XXX" /&gt;
&lt;dataset id="354" name="XXX" description="XXX" datatype="XXX" rank="XXX" saropsrank="XXX" format="XXX" starttime="XXX" endtime="XXX" extentleft="-XXX" extentbottom="XXX" extentright="XXX" extenttop="XXX" source="XXX" wmslayeridstr="XXX" confidence="XXX" directionfrom="XXX" image="XXX" /&gt;
&lt;/catalog&gt;
</string>

Как синтаксис xml преобразуется в его сущность?

Есть идеи, почему это происходит / как это исправить?


person gberg927    schedule 16.09.2011    source источник
comment
К вашему сведению, вы не должны использовать XmlTextReader напрямую. Вместо этого вы должны использовать XmlReader.Create().   -  person John Saunders    schedule 16.09.2011
comment
У меня этого не происходит ... у меня все работает нормально. Ваш точный код, просто заменив создание XmlTextReader на строку для загрузки из файла.   -  person Jon Skeet    schedule 16.09.2011
comment
Невозможно воспроизвести проблему. Что такое responseStream? Я использую File.OpenText для имитации Stream, но этот код работает так, как должен использовать метод OpenText.   -  person StyxRiver    schedule 16.09.2011
comment
Это поток, полученный из веб-запроса / веб-ответа. WebResponse = webrequest.GetResponse () Поток responseStream = response.getResponseStream ()   -  person gberg927    schedule 16.09.2011
comment
Похоже, ваш XML встроен в какой-то элемент, который обрабатывается как строковое значение. Я предполагаю, что что-то, что хочет обрабатывать контент как строковое значение, помещает туда все экранированные сущности, чтобы они не обрабатывались как XML. Я не думаю, что это произошло из-за преобразования в поток, а из-за процесса сериализации или чего-то в этом роде.   -  person BlueMonkMN    schedule 19.09.2011


Ответы (1)


См. Я никогда не могу предсказать поведение XMLReader. Какие-нибудь советы по пониманию?

Я предлагаю избегать методов Move, которые, вероятно, улучшат поведение вашего читателя.

Изменить: однако я проверил ваш код, и он распечатывает все атрибуты за меня.

person BlueMonkMN    schedule 16.09.2011