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, он выдает исключение, например
Незаконные персонажи в пути.
Код @mnieto обновлен
что вы имеете в виду под «попытаться преобразовать приведенный выше результат в XmlDocument»? у вас исключение на doc.Load(html)?
@ Нино Да. excpetion Ожидаемая разметка DTD не найдена. Строка 1, позиция 3.
@MannanBahelim попробуйте установить doc.XmlResolver = null перед doc.Load(html);
Вы упомянули переменную res. Где это? Я попытался загрузить ваш xml в XmlDocument, и он работает правильно: dotnetfiddle.net/pCKfup
Код @Nino обновлен
Переменная @mnieto res является глобальной, поэтому не упоминайте ее в примере кода.
@mnieto, спасибо. его работа ... вау





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 из переменной документа?
Вы можете использовать Linq для xml как @ Wheels73 sugested. Не забудьте добавить using System.Xml.Linq
@MannanBahelim, если вы используете XmlDocument, вы можете получить его с помощью XPath, например: var nodes = xmlDoc.SelectNodes("*/MID[1]/@TID");, а если nodes.Count > 0, вы можете найти значение TID в nodes[0].Values
Вы также можете использовать 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");
Затем вы можете получить доступ к атрибутам соответственно.
надеюсь, это поможет
Можете ли вы показать нам код, в котором вы создаете XmlDocument?