2010-04-28 307 views
2

我正在連接到一個Web服務以將某些數據作爲xml返回。連接工作正常,它返回服務的xml數據。從Web服務中加載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

@Lukasz,只是一個提示:如果你打算在生產中使用這個,拋出一些錯誤處理代碼並確保關閉連接和流。 – 2010-04-28 18:25:59

回答

3

我的猜測是,你正在嘗試使用:

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); 
+0

XDocument.Parse工程...不知道爲什麼我沒有嘗試!謝謝! – Lukasz 2010-04-28 18:33:38