经典ASP发布和接收XML

时间:2015-03-30 08:35:08

标签: xml vbscript asp-classic

嘿,我已经花了好几个小时通过一个经典的ASP页面接收XML,但它不会工作。

这是我的代码:

post.asp

url = "http://myurl.com/receive.asp"
information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"
Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST", url, false
xmlhttp.setRequestHeader "Content-Type", "text/xml" 
xmlhttp.send information

receive.asp

Dim objXmlRequest
Set objXmlRequest = Server.CreateObject("MSXML2.DOMDOCUMENT.3.0")
  objXmlRequest.async = False
  objXmlRequest.setProperty "ServerHTTPRequest", True
  objXmlRequest.validateOnParse = True
  objXmlRequest.preserveWhiteSpace = True

IF objXmlRequest.Load (Request) THEN
  'GET THE REQUEST FROM CLIENT
  strQuery = "//" & "ActionName"
  Set oNode = objXmlRequest.selectSingleNode(strQuery)
  strActionName = oNode.Text
  response.write("success")
ELSE
    Response.Write "Failed to load XML file, reason: " & objXmlRequest.parseError.reason 
END IF

出现此错误:

Failed to load XML file, reason: XML document must have a top level element.

我只是不明白。另外我想知道是否有可能保存加载的XML?

2 个答案:

答案 0 :(得分:1)

试试这个

<强> Post.asp

<%
    information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"
    Response.ContentType = "text/xml"
    Response.Write information
    Response.End
%>

<强> Receive.asp

<%
    '// URL from which to get the XML - it has to include the full URL, I think
    Dim URL: URL = "http://localhost:8096//pages/test/post.asp"

    response.write URL & "<br/>"


    '// Request the XML from the post.asp page
    Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
    xmlhttp.Open "GET", url, false
    xmlhttp.send

    '// Get the received XML object directly from the xmlhttp object
    dim objXML: set objXML = xmlHttp.ResponseXML
    response.write typename(objXML) & "<br/>"

    '// Check that XML has been recieved
    IF not objXML is Nothing THEN

        '// Get the data from the xml
        strQuery = "//UserName"
        Set oNode = objXML.selectSingleNode(strQuery)
        strUserName = oNode.Text
        response.write "success - user = " & strUserName & "<br/>"

    ELSE

        Response.Write "Failed to load XML file"

    END IF

%>

这是打开“receive.asp”页面时的结果(在我的情况下 http://localhost:8096/pages/test/receive.asp

http://localhost:8096/pages/test/post.asp
DOMDocument
success - user = Colt

答案 1 :(得分:1)

好的,这是我的替代答案,这次您请求的页面将XML字符串发送到另一个页面,该页面将其加载到XML文档中并从XML中提取数据。

[编辑]您在原始帖子中用于发送XML的技术工作正常,请参阅下面显示的最终版本(post3.asp /receive3.asp)。

在post2.asp / receive2.asp中,我将XML编码为名为XML的表单字段,然后将该字段加载到接收端的XML对象中。这适用于相对较小的XML文件。

在此示例中,您必须请求post2.asp页面:

<强> post2.asp

<%

    Response.write "Posting XML data to another page<br/>"

    '// URL to which to send XML data
    URL="http://localhost:8096/pages/test/receive2.asp"

    '// The XML string to be sent
    Dim Information: Information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"

    dim XMLHttp : SET XMLHttp = Server.CreateObject("MSXML2.ServerXMLHttp")

    xmlhttp.Open "POST", url, false
    xmlhttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded" 

    '// URLEncode the XML into a form data string and send it
    xmlhttp.send "xml=" & server.URLEncode( Information )

    '// Get the response that is send by receive2.asp
    dim sResponse: sResponse = xmlhttp.ResponseText

    '// Show the response
    Response.write "Response received from the called page:<hr/><span style='color:blue'>" & sResponse & "</span><hr/>"

%>

Receive2.asp

<%

    '// Get the xml string from the request
    xml = Request.form("xml")

    '// Write the received XML as a displayable html string
    response.write "[" & replace(replace(xml, "<", "&lt;"), ">", "&gt;") & "]<br/>"

    '// Create the XML object to load the string
     Dim objXml
     Set objXml = Server.CreateObject("MSXML2.DOMDOCUMENT.3.0")

     '// Try to load the xml string
    if objXML.LoadXML(xml) THEN

        '// Get the data from the xml
        strQuery = "//UserName"
        Set oNode = objXML.selectSingleNode(strQuery)
        strUserName = oNode.Text

        '// Success message
        response.write "success - user = " & strUserName & "<br/>"

    ELSE

        '// Failed message
        Response.Write "Failed to load XML file, reason: " & objXML.parseError.reason & "<br/>"

    END IF
%>

这是打开post2.asp页面时得到的结果

Posting XML data to another page
Response received from the called page:
_______________________________________________________
[<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>]
success - user = Colt
_______________________________________________________

这是最终版本,这次使用的是XML内容类型。你必须打开页面post3.asp:

<强> Post3.asp

<%

    '// URL to which to send XML data
    URL="http://localhost:8096/pages/test/receive3.asp"

    Response.Write "Sending XML data to " & URL & "<br/>"

    information = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>"
    Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
    xmlhttp.Open "POST", url, false
    xmlhttp.setRequestHeader "Content-Type", "text/xml" 
    xmlhttp.send information

    '// Report the response from the called page
    response.write "Response received:<hr/><span style='color:blue'>" & xmlhttp.ResponseText & "</span><hr/>"

%>

<强> Receive3.asp

<%

    Dim objXmlRequest
    Set objXmlRequest = Server.CreateObject("MSXML2.DOMDOCUMENT.3.0")

    IF objXmlRequest.Load (Request) THEN

      'GET THE REQUEST FROM CLIENT
      strQuery = "//UserName"
      Set oNode = objXmlRequest.selectSingleNode(strQuery)
      strActionName = oNode.Text
      response.write "success! user name is " & strActionName  

    ELSE

        Response.Write "Failed to load XML file, reason: " & objXmlRequest.parseError.reason 

    END IF
%>

结果是:

Sending XML data to http://localhost:8096/pages/test/receive3.asp

Response received:
success! user name is Colt