我正在启用ASP的Windows Server上构建网站。我需要从另一台服务器检索XML文档并返回该文档中的值。 xml文件很小 - 只有一个带有文本值的节点。我只需要返回该文本值。我以前从未使用过ASP,谷歌搜索引导我一些代码示例,但到目前为止还没有任何工作。这就是我所拥有的,这给了我一个500:
<%
Dim URL, objXML
URL = "http://someserver.com/xml"
Set objXML = Server.CreateObject("MSXML2.DOMDocument.4.0")
objXML.setProperty "ServerHTTPRequest", True
objXML.async = False
objXML.Load(URL)
If objXML.parseError.errorCode <> 0 Then
Response.Write(objXML.parseError.reason)
Response.Write(objXML.parseError.errorCode)
End If
Set oRoot = objXML.selectSingleNode("//xml/response")
var = oRoot.text
set objXML = nothing
%>
<%= var %>
===========
更新
是的,你对我的XML完全正确。只有一个带有值的节点。根据您的意见,我将我的asp代码编辑为:
<%
Dim URL, objXML, value
URL = "http://someserver.com/xml"
Set objXML = Server.CreateObject("MSXML2.DOMDocument.6.0")
objXML.setProperty "ServerHTTPRequest", True
objXML.async = False
objXML.Load URL
Response.Write objXML.parseError.reason
value = objXML.documentElement.Text
set objXML = nothing
%>
<%= value %>
哪个还在返回500.如何调试ASP?有没有办法打开详细的错误报告?
答案 0 :(得分:3)
我写了这个函数:
<%
Option Explicit
Response.Buffer = True
Dim xml
Set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = False
xml.setProperty "ServerHTTPRequest", True
xml.Load ("http://www.midominio.com/nombre.xml")
Dim title, heading, paragraph, testHTML
title = xml.documentElement.childNodes(0).text
heading = xml.documentElement.childNodes(1).text
paragraph = xml.documentElement.childNodes(2).text
testHTML = xml.documentElement.childNodes(3).text
Set xml = Nothing
%>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h3 align="center"><%= heading %></h3>
<p align="center"><% = paragraph %></p>
<div align="center"><%= testHTML %></div>
</body>
</html>
答案 1 :(得分:2)
假设您的Xml实际上是: -
<?xml version="1.0" ?>
<response>The value</response>
尝试使用: -
Dim value
value = objXML.documentElement.Text
顺便说一句,
当您调用未返回值的方法时,您不需要括号: -
objXML.Load Url
Response.Write objXML.parseError.reason
此外,如果这是您的服务器,请安装MSXML6并使用MSXML2.DOMDocument.6.0。如果这不是您的服务器使用MSXML3.DOMDocument.3.0
答案 2 :(得分:1)
正如Pete Duncanson所说,首先要尝试取消“显示友好的错误消息”。
如果你仍然有500个错误,他们可能来自IIS(你可以通过查看它们来判断)。如果您需要,我已经为enabling error messages on IIS7 here提供了指南。
答案 3 :(得分:1)
将原始代码段的第4行更改为
Set objXML = Server.CreateObject("MSXML2.DOMDocument.6.0")
和第14行到
Set oRoot = objXML.selectSingleNode("//response")
你应该没事(假设你的xml是AnthonyWJones所描述的)。
您的原始// xml / response将从文档中获取文本,如下所示
<?xml version="1.0" ?>
<xml>
<response>hello</response>
</xml>
答案 4 :(得分:0)
调试ASP并不像您习惯的那样令人愉快。这应该有所帮助:
可能是您正在使用的服务器上有一个500错误处理程序页面(假设您没有运行本地)。在这种情况下,如果可以,您将不得不修改500页,以便为您提供有关真实错误的更多详细信息(请参阅http://www.w3schools.com/ASP/asp_ref_error.asp)。如果您在本地开发,但您往往会获得所有有用的详细信息。
答案 5 :(得分:0)
经典的ASP调试是一个令人讨厌的话题,多年来已经牺牲了数百万个精细的脑细胞。即使使用适用于developing和/或supporting经典ASP的工具,启用调试也可以是tricky。
如果您的努力是一个相对较小的一次性事情,正如您的问题所暗示的那样,那么花费大量时间设置和配置高级ASP /脚本调试环境可能没有意义。相反,根据Pete Duncanson's回答,只需将一些Response.Write语句注入到脚本中,并找出它以旧方式失败的原因和原因。但是,Pete没有指出的一件事是你需要打开一个VBScript错误处理程序(实际上是错误吞并者),以避免抛出未处理的异常,导致IIS为你提供500.
我设置并运行以下代码,它工作正常(即没有错误)。 XML URL指向本地计算机上与ASP页面相同的虚拟目录中的简单文件,它包含AnthonyWJones's答案中的XML。 (顺便说一句,我不知道你是如何在原始问题中如此好地格式化你的VBScript,所以我的副本看起来很糟糕。)
<%
On Error Resume Next ' prevent tossing unhandled exception
Dim URL, objXML, value
URL = "http://someserver.com/xml"
Set objXML = Server.CreateObject("MSXML2.DOMDocument.6.0")
Response.Write "after CreateObject: " & Err.Description & "<br>"
objXML.setProperty "ServerHTTPRequest", True
Response.Write "after setProperty: " & Err.Description & "<br>"
objXML.async = False
Response.Write "after async: " & Err.Description & "<br>"
objXML.Load URL
Response.Write "after Load: " & Err.Description & "<br>"
Response.Write objXML.parseError.reason
Response.Write "after write of parseError.reason: " & Err.Description & "<br>"
value = objXML.documentElement.Text
Response.Write "after setting value: " & Err.Description & "<br>"
set objXML = nothing
%>
<%= value %>
在IE或Firefox中打开它,如果一切顺利,你应该看到:
after CreateObject: after setProperty: after async: after Load: after write of parseError.reason: after setting value: The value
当然,一切都不顺利,否则你不会在这里,在这种情况下你应该看到错误细节出现在一个Response.Write值之后的某个点上。这里有一些关于VBScript Err对象的additional information。
祝你好运!