嘿,我已经花了好几个小时通过一个经典的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?
答案 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, "<", "<"), ">", ">") & "]<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