2014-09-23 2 views
0

Я пытаюсь прочитать xml из веб-ответа и получить от него выбранные узлы (i.e ссылку). Это то, что у меня есть до сих пор, и его показ «System.Xml.XmlElement», как выход.Как читать 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' как вывод? –

+0

@ Когда вы правы в этом вопросе OP: «Почему я вижу имя типа при вызове' .ToString() '_ _. Вопрос, на который они хотят ответить, отличается от того, с которым я связан: _ «Как выбрать определенный узел XML или значение атрибута» _. – CodeCaster

+0

@CodeCaster: Да, но я думаю, что важно идти шаг за шагом ... Я не думаю, что это дублированный вопрос, и я думаю, что это полезно иметь по своему усмотрению. –

ответ

4

Непосредственная проблема (причина, по которой вы видите System.Xml.XmlElement), заключается в том, что вы вызываете ToString на XmlElement, что не отменяет этот метод. Вы, вероятно, хотите использовать InnerXml или OuterXml свойства вместо:

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

Вот возвращение всего XML первого ребенка, который code. Затем вам нужно будет изменить тот элемент, который вы ищете, и получить нужные атрибуты.

В качестве дополнительной заметки я настоятельно рекомендую использовать 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

Смежные вопросы