2014-09-23 62 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