1

このWebアプリケーションでは、モバイルアンにSMSを送信したいと思います。これはaspx.csファイルの私のコードです:

protected void buttonSendOnClick(object sender, EventArgs e)
{
    //are required fields filled in:
    if (textboxRecipient.Text == "")
    {
         textboxError.Text += "Recipient(s) field must not be empty!\n";
         textboxError.Visible = true;
         return;
    }
        //we creating the necessary URL string:
    string ozSURL = "http://127.0.0.1"; //where Ozeki NG SMS Gateway is running
    string ozSPort = "9501"; //port number where Ozeki NG SMS Gateway is listening
    string ozUser = HttpUtility.UrlEncode("admin"); //username for successful login
    string ozPassw = HttpUtility.UrlEncode("abc123"); //user's password
    string ozMessageType = "SMS:TEXT"; //type of message
    string ozRecipients = HttpUtility.UrlEncode( textboxRecipient.Text); //who will        

 //get the message
    string ozMessageData = HttpUtility.UrlEncode(textboxMessage.Text); //body of  
 //message

     string createdURL = ozSURL + ":" + ozSPort + "/httpapi" +
          "?action=sendMessage" +
            "&username=" + ozUser +
            "&password=" + ozPassw +
            "&messageType=" + ozMessageType +
            "&recipient=" + ozRecipients +
            "&messageData=" + ozMessageData;

   try
   {
            //Create the request and send data to Ozeki NG SMS Gateway Server by HTTP 
connection
            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(createdURL);

            //Get response from Ozeki NG SMS Gateway Server and read the answer
            HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
            System.IO.StreamReader respStreamReader = new 
 System.IO.StreamReader(myResp.GetResponseStream());
            string responseString = respStreamReader.ReadToEnd();
            respStreamReader.Close();
            myResp.Close();

            //inform the user
            string result = Regex.Replace(responseString, @"<[^>]*>", string.Empty);
            textboxError.Text = Server.HtmlEncode( result);
            textboxError.Visible = true;
        }
        catch (Exception)
        {
            //if sending request or getting response is not successful Ozeki NG SMS                 
  Gateway Server may do not run
            textboxError.Text = "Ozeki NG SMS Gateway Server is not running!";
            textboxError.Visible = true;
        }

    }

実行した後、次のようなxmlドキュメントとしてテキストを取得しました

<Responses>
<Response0>
    <Action>sendMessage</Action>
    <Data>
        <AcceptReport>
            <StatusCode>0</StatusCode>
            <StatusText>Message accepted for delivery</StatusText>
            <MessageID>89c8011c-e291-44c3-ac72-cd35c76cb29d</MessageID>
            <Recipient>+85568922903</Recipient>
        </AcceptReport>
    </Data>
</Response0>
</Responses>

しかし、私はそれを次のように表示したい

配信用に受け入れられたメッセージメッセージID:IEUHSHIL受信者:+441234567

では、どうすればこれを行うことができますか?

4

5 に答える 5

1

コメントで提案されている方法の1つに関しては、次のようなものを使用してください。

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(load your xml document or string here);
        XmlNodeList xnList = doc.SelectNodes("Response0/Data/AcceptReport");
        foreach (XmlNode xn in xnList)
                            {
                                string status = xn["StatusTest"].InnerText;
                                string messageID = xn["MessageID"].InnerText;
                                string recipient = xn["Recipient"].InnerText;
                            }
        string finalString = string.Format("{0} Message ID: {1} Recipient {2}", status, messageID, recipient);

これにより、ロードしたドキュメントまたは文字列に基づいてXMLドキュメントが作成されます。XmlNodeListを使用すると、基本的に必要なXmlElementを選択できます。この場合、要求した形式でノード情報を使用して文字列をフォーマットします。

于 2012-08-09T08:16:43.973 に答える
0

このようなものを試してください

       string stext = @"<Responses>
    <Response0>
     <Action>sendMessage</Action>
       <Data>
        <AcceptReport>
         <StatusCode>0</StatusCode>
         <StatusText>Message accepted for delivery</StatusText>
         <MessageID>89c8011c-e291-44c3-ac72-cd35c76cb29d</MessageID>
         <Recipient>+85568922903</Recipient>
       </AcceptReport>
      </Data>
    </Response0>
   </Responses>";
       XElement xm = XElement.Parse(stext);
       string sout="";
       sout = xm.Descendants("StatusText").First().Value + " Message ID:" + xm.Descendants("MessageID").First().Value + " Recipient:" + xm.Descendants("Recipient").First().Value;
于 2012-08-09T08:21:48.307 に答える
0

XmlDocumentXPathでクラスを使用するのはどうですか?

クライアントコード:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(...);  // Load from file, stream, etc.
string status = GetDeliveryStatus(xmlDocument);

XMLドキュメント処理:

private static string GetDeliveryStatus(XmlDocument xmlDocument)
{
    XmlNode reportNode = xmlDocument.SelectSingleNode("/Responses/Response0/Data/AcceptReport");
    if (reportNode == null)
        throw new ArgumentException("AcceptReport node is absent", xmlDocument);

    var messageIDNode = reportNode["MessageID"];
    if (messageIDNode == null)
        throw new ArgumentException("MessageID node is absent", xmlDocument);
    var messageID = messageIDNode.InnerText;

    var recipientNode = reportNode["Recipient"];
    if (recipientNode == null)
        throw new ArgumentException("Recipient node is absent", xmlDocument);
    var recipient = recipientNode.InnerText;

    var result = string.Format("Message accepted for delivery Message ID: {0} Recipient: {1}", messageID, recipient);
    return result;
}
于 2012-08-09T08:29:05.470 に答える
0

あなたはjsonの結果を得ました:

それを文字列に変換してから、中括弧をスペースに置き換えました。これがxmlを取得した理由です。

これらの行を再確認してください:

 //inform the user
            string result = Regex.Replace(responseString, @"<[^>]*>", string.Empty);
            textboxError.Text = Server.HtmlEncode( result);

ResponseStringを確認し、そこから必要なデータを抽出します。

役立つリンク: HttpwebResponse json response、C# を読んで、逆シリアル化するためにjson形式の文字列を分割する方法は.netオブジェクトにありますか?

于 2012-08-09T08:29:26.423 に答える
0

XSLTを使用します。その理由は、変換をファイルに簡単に保存できるためです。つまり、メッセージ形式が変更された場合でも、それに対応するために変換を簡単に更新できます。

次のような関数を追加します

public void XslTransformer(string source, string stylesheet, string output)
{
    XslTransform xslt = new XslTransform();
    xslt.Load(stylesheet);
    xslt.Transform(source, output);                
}

そして、それを呼び出して、XMLを渡し、次のような変換を行います。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
Message accepted for delivery
    <table border="0">
      <tr>
        <td>Message ID:</td>
        <td><xsl:value-of select="Responses/Response0/Data/AcceptReport/MessageID"/></td>
        <td>Recipient:</td>
        <td><xsl:value-of select="Responses/Response0/Data/AcceptReport/Recipient"/></td>
        <td>StatusCode:</td>
        <td><xsl:value-of select="Responses/Response0/Data/AcceptReport/MessageID"/></td>
      </tr>
    </table>
</html>
</xsl:template>
</xsl:stylesheet>

必要に応じてこの形式を変更してください。

于 2012-08-09T10:10:57.863 に答える