在经典的asp中读取和显示Web服务输出

时间:2015-04-01 06:09:05

标签: web-services vbscript asp-classic

我正在阅读来自经典asp。

的webservice输出

Web服务输出如下。

<boolean xmlns="http://somewebsite.com/">true</boolean>

这是正常的输出。

我在下面编写代码来阅读经典asp。

中的这个输出
Set obj1 = Server.createobject("MSXML2.ServerXMLHTTP.3.0")
URL1 = "http://webserive.asmx/method?para=2"
obj1.open "GET", URL1, False
obj1.setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"
obj1.setRequestHeader "SOAPAction", URL1
obj1.send 

if obj1.responseText <> "" Then
    response.write "ok." & obj1.responseText
end if

但是此输出打印以下输出:

  

“ok.true”

输出中有一个空间是不可预期的。

这就是问题所在。

请建议。

2 个答案:

答案 0 :(得分:1)

ResponseText的所有强烈目的的输出是有效的HTML结构,就互联网浏览器而言,并会相应地对待它。当您使用Response.Write()向浏览器发送内容时,它会“按原样”发送,因此在这种情况下,<boolean>元素被视为HTML,因此仅输出包含的文本true。< / p>

要解决此问题,首先需要对ResponseText进行HTML编码,然后再将其发送到浏览器,以便浏览器知道将发送的内容视为普通旧文本。您可以通过调用方法Server.HTMLEncode()

来完成此操作
Response.Write "ok." & Server.HTMLEncode(obj1.ResponseText)

根据MSDN;

  

HTMLEncode方法将HTML编码应用于指定的字符串。在Web应用程序中使用表单数据和其他客户端请求数据之前,这非常有用。编码数据会将可能不安全的字符转换为HTML编码的等效字符   如果要编码的字符串不是双字节字符集(DBCS),则HTMLEncode按如下方式转换字符:

     
      
  • 小于号的字符(<)将转换为&lt;
  •   
  • 大于号的字符(>)将转换为&gt;
  •   
  • &符号(&)将转换为&amp;
  •   
  • 双引号字符(")将转换为&quot;
  •   
  • 任何代码大于或等于0x80的ASCII代码字符都会转换为&#<number>,其中<number>是ASCII字符值。
  •   
     

如果要编码的字符串是DBCS,则HTMLEncode按如下方式转换字符:

     
      
  • 转换所有扩展字符。
  •   
  • 任何代码大于或等于0x80的ASCII代码字符都会转换为&#<number>,其中<number>是ASCII字符值。
  •   
  • 日语代码页中的半角片假名字符未被转换。
  •   

发送ResponseText时发生这种情况;

responseText的

<boolean xmlns="http://somewebsite.com/">true</boolean>

客户端输出

ok.true

如果你使用Server.HTMLEncode(),那将是;

ResponseText (HTML编码)

&lt;boolean xmlns=&quote;http://somewebsite.com/&quote;&gt;true&lt;/boolean&gt;

客户端输出

ok.<boolean xmlns="http://somewebsite.com/">true</boolean>

答案 1 :(得分:0)

所以我想我可能会错过了解你的需求。如果要解析XML以将其删除,则只删除;

的内容
<boolean xmlns="http://somewebsite.com/">true</boolean>
在这种情况下,

返回到浏览器true,然后您需要使用类似XPath的内容来解析XML以获取基础值。

'After the initial Send()

Dim xml, root
If obj1.Status = 200 Then
  Set xml = obj1.ResponseXML
  Call xml.SetProperty("SelectionLanguage", "XPath")
  Set root = xml.DocumentElement
  Call Response.Write(root.SelectSingleNode("boolean").Text)
End If