2013-07-11 59 views
-1

摘要認證之後:無功與XML摘要式身份驗證

var resultText = Digester.GrabResponse("/blabla"); 

我有這個在var resulText:

<?xml version="1.0" encoding="utf-8"?> 
<response> 
<HELLO> 
    <time>08:10</time> 
    <date>11.08.09</date> 
    <temp>35.5</temp> 
    <humi>37.7</humi> 
</HELLO> 
</response> 

我試着用的XDocument獲取日期的價值,但它沒沒有工作。

+0

你嘗試了什麼? 「沒有工作」是什麼意思? – DGibbs

+0

使用XDocument:路徑中存在非法字符。使用XReader:null參考。 XDocument temp = XDocument.Load(resultText.ToString()); var date = temp.Descendants(「date」)。First(); label1.Text = date.ToString(); */ – user2428412

回答

1

這是非常簡單的: -

XDocument xml = XDocument.Parse(resultText.ToString()); 

var date = (from n in xml.Descendants("HELLO") 
      select n.Element("date").Value).SingleOrDefault().ToString(); 

您需要使用XDocument.Parse方法。看起來你正在將一個XML字符串作爲URI傳遞給Load方法,該方法顯然無法工作。

+0

當然。我正在加載一個字符串.... XDocument.Load想要一個URI ...快速而出色的響應。謝謝 – user2428412

+0

注意:如果響應包含多個「Hello」元素,這將不起作用(將引發異常)。如果缺少「date」元素,它也會拋出異常。出於顯而易見的原因,將在選擇中拋出異常。 SingleOrDefault也可能是Single,而且ToString()在這裏是多餘的。這對你來說可能就足夠了,但在我看來,這不是一個非常可靠的方法。 –

+1

@ByteBlast他的問題是使用'XDocument.Load'並傳入一個XML字符串而不是一個URI,所以實際上,答案沒有錯。查詢是一個簡單的例子來證明它的工作原理。我在他的示例XML中看不到多個'HELLO'元素。如果是這樣,我顯然不會選擇使用'SingleOrDefault()'來演示並調用類似'.ToList ();'代替。 – DGibbs