Ошибка при преобразовании следующего результата StreamReader в XML на C#

  if (response.StatusCode == HttpStatusCode.OK)
                    {

                        using (Stream stream = response.GetResponseStream())
                        {

                            using (StreamReader reader = new StreamReader(stream))
                            {
                                res= reader.ReadToEnd();
                                XmlDocument doc = new XmlDocument();
                                doc.XmlResolver = null;
                                doc.Load(res);
                            }
                            Console.WriteLine(res);
                        }

                    }

В приведенном выше коде я получаю следующий результат в переменной res.

Как получить атрибут TID из заданного результата.

<!DOCTYPE RESULT SYSTEM "http://today.com/email/viewemail.dtd">
<RESULT REQID = "16006914462">
   <MID SUBMITDATE = "2018-08-02 12:25:37" ID = "1" TAG = "null" TID = "40293189378" />
</RESULT>

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

Незаконные персонажи в пути.

Можете ли вы показать нам код, в котором вы создаете XmlDocument?

mnieto 02.08.2018 09:43

Код @mnieto обновлен

Mannan Bahelim 02.08.2018 09:45

что вы имеете в виду под «попытаться преобразовать приведенный выше результат в XmlDocument»? у вас исключение на doc.Load(html)?

Nino 02.08.2018 09:50

@ Нино Да. excpetion Ожидаемая разметка DTD не найдена. Строка 1, позиция 3.

Mannan Bahelim 02.08.2018 09:54

@MannanBahelim попробуйте установить doc.XmlResolver = null перед doc.Load(html);

Nino 02.08.2018 09:59

Вы упомянули переменную res. Где это? Я попытался загрузить ваш xml в XmlDocument, и он работает правильно: dotnetfiddle.net/pCKfup

mnieto 02.08.2018 10:01

Код @Nino обновлен

Mannan Bahelim 02.08.2018 10:03

Переменная @mnieto res является глобальной, поэтому не упоминайте ее в примере кода.

Mannan Bahelim 02.08.2018 10:04

@mnieto, спасибо. его работа ... вау

Mannan Bahelim 02.08.2018 10:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

StreamReader.ReadToEnd возвращает строку. XmlDocument.Load загружает контент из файла или потока.

Итак, вы должны использовать

   doc.LoadXml(res);

Или вы можете изменить свой код для загрузки XmlDocument из потока

                    using (Stream stream = response.GetResponseStream())
                    {

                        using (StreamReader reader = new StreamReader(stream))
                        {
                            XmlDocument doc = new XmlDocument(reader);
                            doc.XmlResolver = null;
                            doc.Load(res);
                        }
                        Console.WriteLine(res);
                    }

Как мне получить TID из переменной документа?

Mannan Bahelim 02.08.2018 10:15

Вы можете использовать Linq для xml как @ Wheels73 sugested. Не забудьте добавить using System.Xml.Linq

mnieto 02.08.2018 10:18

@MannanBahelim, если вы используете XmlDocument, вы можете получить его с помощью XPath, например: var nodes = xmlDoc.SelectNodes("*/MID[1]/@TID");, а если nodes.Count > 0, вы можете найти значение TID в nodes[0].Values

Nino 02.08.2018 10:38

Вы также можете использовать LinqXMl, чтобы делать то, что вам нужно. В приведенном ниже примере я загружаю xml из текстового файла, чтобы имитировать ответ xml. Существует перегрузка метода XDocument.Load, который принимает строку XML.

XDocument xdoc = XDocument.Load("C:\\test.xml");
XElement resultNode = xdoc.Elements().First().Elements().FirstOrDefault();
var tidVale = resultNode.Attributes().First(a => a.Name == "TID");

Затем вы можете получить доступ к атрибутам соответственно.

надеюсь, это поможет

Другие вопросы по теме