0

我有一个将接收 XML 的自定义 HTTP 处理程序。我需要将节点保存到字符串参数中。这是 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?请给我一个解决方案

4

2 回答 2

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

于 2013-04-24T06:08:51.377 回答
1

You can use 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;
于 2013-04-24T04:16:36.247 回答