Загрузка XML из веб-службы - PullRequest
3 голосов
/ 28 апреля 2010

Я подключаюсь к веб-сервису, чтобы вернуть некоторые данные в формате XML. Соединение работает нормально и возвращает данные XML из службы.

var remoteURL = EveApiUrl;

var postData = string.Format("userID={0}&apikey={1}&characterID={2}", UserId, ApiKey, CharacterId);

var request = (HttpWebRequest)WebRequest.Create(remoteURL);

request.Method = "POST";
request.ContentLength = postData.Length;
request.ContentType = "application/x-www-form-urlencoded";

// Setup a stream to write the HTTP "POST" data
var WebEncoding = new ASCIIEncoding();
var byte1 = WebEncoding.GetBytes(postData);
var newStream = request.GetRequestStream();

newStream.Write(byte1, 0, byte1.Length);
newStream.Close();

var response = (HttpWebResponse)request.GetResponse();

var receiveStream = response.GetResponseStream();

var readStream = new StreamReader(receiveStream, Encoding.UTF8);
var webdata = readStream.ReadToEnd();

Console.WriteLine(webdata);

Это распечатывает XML, который приходит от службы. Я также могу сохранить XML как XML-файл, например, так:

TextWriter writer = new StreamWriter(@"C:\Projects\TrainingSkills.xml");
writer.WriteLine(webdata);
writer.Close();

Теперь я могу загрузить файл как XDocument для выполнения запросов к нему, как это;

var data = XDocument.Load(@"C:\Projects\TrainingSkills.xml");

Моя проблема в том, что я не хочу сохранять файл и загружать его снова. Когда я пытаюсь загрузить напрямую из потока, я получаю исключение Недопустимые символы в пути . Я не знаю, что происходит, если я могу загрузить тот же xml, что и текстовый файл, почему я не могу загрузить его в виде потока.

xml похож на это;

<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="2">
  <currentTime>2010-04-28 17:58:27</currentTime>
  <result>
    <currentTQTime offset="1">2010-04-28 17:58:28</currentTQTime>
    <trainingEndTime>2010-04-29 02:48:59</trainingEndTime>
    <trainingStartTime>2010-04-28 00:56:42</trainingStartTime>
    <trainingTypeID>3386</trainingTypeID>
    <trainingStartSP>8000</trainingStartSP>
    <trainingDestinationSP>45255</trainingDestinationSP>
    <trainingToLevel>4</trainingToLevel>
    <skillInTraining>1</skillInTraining>
  </result>
  <cachedUntil>2010-04-28 18:58:27</cachedUntil>
</eveapi>

Спасибо за вашу помощь!

1 Ответ

4 голосов
/ 28 апреля 2010

Я предполагаю, что вы пытаетесь использовать:

string xml = GetXmlFromService();
XDocument doc = XDocument.Load(xml);

Это пытается загрузить его так, как если бы XML был именем файла!

Вместо этого вы хотите

XDocument doc = XDocument.Parse(xml);

В качестве альтернативы используйте

XDocument doc = XDocument.Load(textReader);

или

XmlReader reader = XmlReader.Create(stream);
XDocument doc = XDocument.Load(reader);
...