如何将XML节点值保存到字符串参数

时间:2013-04-24 04:11:23

标签: c# xml xml-parsing httphandler

我有一个自定义HTTP处理程序,它将接收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?请给我一个解决方案

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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>

要获得trade_no的值,您可以使用DOM或XPathReader。以下是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