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

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 に答える
1
using (var reader = new StreamReader(stream))
{
   var response = reader.ReadToEnd();
}

ここで、応答には受信した xml 全体が含まれます。DOM にロードし、ノードの innerXml をフェッチして、ノードの文字列を取得できます。

ただし、ストリームの Xml ノードを処理する場合は、DOM アプローチではなく XPathReader を使用することをお勧めします

結果の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 に答える