2014-09-23 66 views
0

我想從web響應中讀取xml,並從中獲取選定的節點(即鏈接)。這是我迄今爲止的內容,並且顯示了「System.Xml.XmlElement」作爲輸出。如何從Web響應中讀取xml?

WRequest方法,發送POST請求使用網絡請求URL並返回一個字符串XML響應,例如:

<status> <code>201</code> 
<resources_created> 
<link href="####" rel="############" title="####" /> 
</resources_created> 
<warnings> <warning>display_date is read-only</warning> </warnings> 
</status> 

ReadUri2方法

public static string readUri2() 
    { 
     string uri = ""; 
     string xml = WRequest(); 

     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.LoadXml(xml); 

     XmlNode elem = xmlDoc.DocumentElement.FirstChild; 
     uri = elem.ToString(); 
     return uri; 

     } 

pageLoad的調用

protected void Page_Load(object sender, EventArgs e) 
    { 
     string uri = readUri2(); 
     Label1.Text = Server.HtmlEncode(uri); 

    } 

任何幫助將非常感激。非常感謝。

+0

@CodeCaster:以什麼方式重複?它如何解釋爲什麼OP將'System.Xml.XmlElement'看作輸出? – 2014-09-23 15:08:59

+0

@你說得對,OP的問題是_「當我調用'.ToString()'」_時,爲什麼會看到類型名稱。他們想要回答的問題是一個不同的問題,即我所鏈接的問題:_「如何選擇特定的XML節點或屬性值」_。 – CodeCaster 2014-09-23 15:12:10

+0

@CodeCaster:是的,但我認爲一步一步去做是很重要的......我不認爲這是一個重複的問題,我認爲這是有用的。 – 2014-09-23 15:13:05

回答

4

立即出現的問題(您看到的原因System.Xml.XmlElement)是您在XmlElement上調用ToString,它不覆蓋該方法。你可能想使用InnerXmlOuterXml屬性,而不是:

XmlNode elem = xmlDoc.DocumentElement.FirstChild; 
return elem.OuterXml; 

這就是全部退回了第一個孩子,這是code的XML的。接下來,您需要更改要查找的元素,並獲取正確的屬性。作爲一個側面說明,我強烈建議使用LINQ to XML,而不是 - 它通常是更好的XML API。例如:

// TODO: Rename the `WRequest` method; that's horrible. 
var document = XDocument.Parse(WRequest()); 
var href = document.Descendants("link").Single().Attribute("href").Value; 
+0

謝謝你對我錯誤出現的地方的全面解釋。非常感謝您的幫助。 – user3070072 2014-09-23 15:18:52