XML和ASP:检索并解析远程文件

时间:2009-05-23 21:45:14

标签: xml asp-classic

我正在启用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?有没有办法打开详细的错误报告?

6 个答案:

答案 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并不像您习惯的那样令人愉快。这应该有所帮助:

  • 如果使用IE,请确保在选项
  • 中有未显示的“显示友好错误消息”
  • 使用Response.Write来跟踪您通过代码的距离。

可能是您正在使用的服务器上有一个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

祝你好运!