2013-04-24 48 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

相关问题