2011-07-05 30 views
3

丟失時負載的XmlDocument我有以下代碼:根元素是從流

var XmlDoc = new XmlDocument(); 
Console.WriteLine(); 
Console.WriteLine(response.ReadToEnd()); 
Console.WriteLine(); 

// setup the XML namespace manager 
XmlNamespaceManager mgr = new XmlNamespaceManager(XmlDoc.NameTable); 
// add the relevant namespaces to the XML namespace manager 
mgr.AddNamespace("ns", "http://triblue.com/SeriousPayments/"); 
XmlDoc.LoadXml(response.ReadToEnd()); 
XmlElement NodePath = (XmlElement)XmlDoc.SelectSingleNode("/ns:Response", mgr); 

while (NodePath != null) 
    { 
     foreach (XmlNode Xml_Node in NodePath) 
     { 
      Console.WriteLine(Xml_Node.Name + " " + Xml_Node.InnerText); 
     } 
    } 

我越來越:

缺少根元素。

在:

XmlDoc.LoadXml(response.ReadToEnd()); 

我的XML看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://triblue.com/SeriousPayments/"> 
    <Result>0</Result> 
    <Message>Pending</Message> 
    <PNRef>230828</PNRef> 
    <ExtData>InvNum=786</ExtData> 
</Response> 

我迷路了。有人能告訴我我做錯了什麼嗎?我知道我之前有這個工作,所以我不知道我搞砸了什麼。

一如既往,謝謝!

*我之所以編輯後,我得到了我的答案* *

我需要改變線路:

XmlElement NodePath = (XmlElement)XmlDoc.SelectSingleNode("/ns:Response"); 

到:

XmlElement NodePath = (XmlElement)XmlDoc.SelectSingleNode("/ns:Response", mgr); 

這沒有它就無法工作。

+0

什麼Console.WriteLine(response.ReadToEnd());輸出? – DoctorMick

+0

什麼是響應類型? – DeveloperX

+0

您如何期待「實質性」來自** steam **? :-)(對不起,忍不住...) –

回答

11

看來你正在讀取response流兩次。它不這樣工作,你第二次得到一個空字符串。要麼刪除線Console.WriteLine(response.ReadToEnd());或保存到一個字符串的響應:

string responseString = response.ReadToEnd(); 
… 
Console.WriteLine(reponseString); 
… 
XmlDoc.LoadXml(responseString); 
+0

比我快24秒,我想我必須提高我的打字速度:) – Alex

+0

太棒了! TY!那讓我越過了那條線!我現在正在使用nodepath行:需要命名空間管理器或XsltContext。該查詢具有前綴,變量或用戶定義的函數。 – ErocM

+0

@ErocM,評論不適合提問或回答問題。你應該問一個全新的問題。 – svick

4

你應該存儲在一個字符串變量中的XML閱讀器的輸入,因爲第二次ReadToEnd()方法被調用,它無法讀取從什麼流,因爲它已經在最後,並返回一個空字符串。

string responseString = response.ReadToEnd() 
1

當你調用 Console.WriteLine(response.ReadToEnd()); 它讀取的第二次全responde內容,您可以閱讀agiin

string responsecontent=response.ReadToEnd(); 

,並使用responsecontent隨時隨地