2013-04-24 73 views
0

我有一個自定義的HTTP處理程序,它將接收XML。我需要將節點保存到字符串參數中。 這是XML -如何將XML節點值保存爲字符串參數

<?xml version="1.0" encoding="utf-8"?> 
<alp> 
    <trade_no>11q</trade_no> 
    <out_trade_no>22z</out_trade_no> 
    <trade_status>T</trade_status> 
</alp> 

我曾經嘗試這樣做 -

public void ProcessRequest(HttpContext context) 
    {    
     var stream = context.Request.InputStream; 
     byte[] buffer = new byte[stream.Length]; 
     stream.Read(buffer, 0, buffer.Length); 
     string strXml = Encoding.UTF8.GetString(buffer); 
     XmlTextReader reader = new XmlTextReader(new System.IO.StringReader(strXml)); 
     .......... 
} 

,或者使用DOM?請建議我一個解決方案

回答

1

您可以使用LINQ XDocument

var stream = context.Request.InputStream; 
byte[] buffer = new byte[stream.Length]; 
stream.Read(buffer, 0, buffer.Length); 
XDocument doc = XDocument.Parse(Encoding.UTF8.GetString(buffer)); 
var tradeNo = doc.Descendants("trade_no").FirstOrDefault().Value; 
var outTradeNo = doc.Descendants("out_trade_no").FirstOrDefault().Value; 
+0

感謝編輯:) – Sandy 2013-04-24 13:25:21

1
using (var reader = new StreamReader(stream)) 
{ 
    var response = reader.ReadToEnd(); 
} 

這裏響應包含收到的整個XML。您可以將它加載到DOM中,並獲取節點的innerXml以獲取節點的字符串。

但是,如果你要處理的數據流的XML節點,我建議去爲XPathReader而不是DOM方法

如果你能詳細你想如何使用生成的XML或者爲什麼你想要它作爲字符串,我可以建議更好。

編輯

> I exactly need the node value, ie value of <trade_no> 

爲了讓您既可以使用DOM或XPathReader trade_no值。以下是例如用DOM

using(var reader = new StreamReader(stream)) 
{ 
    var response = reader.ReadToEnd(); 
    var document = new XmlDocument(); 
    document.LoadXml(response); 
    var tradeNoNode = document.SelectSingleNode("//trade_no"); 

    if(tradeNoNode != null) { 
     var tradeNo = tradeNoNode.InnerText; 
    } 
} 

對於一個有效的解決方案,請使用XPathReader

+0

我正好需要的節點值,即價值的'' Sandy 2013-04-24 06:14:55

+0

謝謝Jyotsna :) – Sandy 2013-04-24 13:25:50

相關問題