我有一个自定义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?请给我一个解决方案
答案 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