XML и ASP: получение и анализ удаленного файла - PullRequest
4 голосов
/ 24 мая 2009

Я создаю сайт на Windows Server с включенным ASP. Мне нужно получить документ XML с другого сервера и вернуть значение в этом документе. XML-файл небольшой - только один узел с текстовым значением. Мне просто нужно вернуть это текстовое значение. Я никогда раньше не работал с ASP, и поиск в Google привел меня к некоторым примерам кода, но пока ничего такого, что работает. Вот что у меня есть, что дает мне 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 ]

3 голосов
/ 14 марта 2012

Я написал эту функцию:

<%
   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>
2 голосов
/ 24 мая 2009

Предполагается, что ваш 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

1 голос
/ 04 июня 2009

Измените строку 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>
1 голос
/ 27 мая 2009

Как сказал Пит Дункансон, первое, что нужно попробовать, это снять галочку "Показывать дружественные сообщения об ошибках".

Если вы по-прежнему получаете 500 ошибок, они, вероятно, исходят из IIS (вы, вероятно, сможете узнать, посмотрев на них). Я поставил руководство по включению сообщений об ошибках на IIS7 здесь , если вам это нужно.

0 голосов
/ 28 мая 2009

Классическая отладка ASP - отвратительная тема, ради которой миллионы других тонких клеток мозга были принесены в жертву за эти годы. Даже с инструментами, предназначенными для разработки и / или с поддержкой классического ASP, включение отладки может быть хитрым .

Если ваши усилия являются относительно небольшими разовыми вещами, как предполагает ваш вопрос, то, вероятно, не имеет смысла тратить много времени на настройку и настройку расширенной среды отладки ASP / сценариев. Вместо этого, согласно ответу Пита Дункансона , просто внедрите некоторые операторы Response.Write в свой сценарий и выясните, где и почему он не работает по старинке. Однако Пит не заметил, что вам нужно будет включить обработчик ошибок VBScript (на самом деле, проглотитель ошибок), чтобы избежать выброса необработанного исключения, в результате чего IIS будет обслуживать 500.

Я установил и запустил следующий код, и он работал нормально (то есть без ошибок). URL-адрес XML указывал на простой файл в том же виртуальном каталоге на локальном компьютере, что и страница ASP, и содержал XML-файл, найденный в ответе AnthonyWJones . (Кстати, я понятия не имею, как вы так хорошо отформатировали 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.

Удачи!

0 голосов
/ 26 мая 2009

Отладка ASP не так приятна, как вы привыкли. Это должно помочь, хотя:

  • Если вы используете IE, убедитесь, что вы сняли флажок «Показывать дружественные сообщения об ошибках» в параметрах
  • Используйте Response.Write для отслеживания того, как далеко вы проходите через свой код.

Возможно, у вас есть страница обработчика ошибок 500 на сервере, который вы используете (при условии, что вы не работаете локально). В этом случае вам придется изменить страницу 500, если вы можете, чтобы она дала вам более подробную информацию о реальной ошибке (см. http://www.w3schools.com/ASP/asp_ref_error.asp). Если вы разрабатываете локально, хотя вы склонны получать все сочные детали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...