2013-11-14 4 views
0

Я пытаюсь извлечь некоторый XML в классический ASP для старого сайта.Чтение XML в классическом ASP

Я могу заставить его работать на одном примере, но не на другом. Мне интересно, может ли кто-нибудь сообщить мне, что мне нужно сделать, чтобы заставить их обоих работать. Заранее спасибо.

Рабочий пример

Dim o2, oXML2 
Set oXML2 = Server.CreateObject("Msxml2.DOMDocument.6.0") 
Set o2 = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0") 
o2.open "GET", "https://api.eveonline.com/eve/CharacterID.xml.aspx?names=BorisKarlov", False 
o2.send 


xml2 = o2.responseText 
oXML2.LoadXML xml2 

response.Write oXML2.selectSingleNode("//currentTime").Text 

В противном случае пример

Dim o, oXML 
Set oXML = Server.CreateObject("Msxml2.DOMDocument.6.0") 
Set o = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0") 
o.open "GET", "http://api.freelancer.com/User/Properties.xml?id=sulung81", False 
o.send 

xml = o.responseText 
oXML.LoadXML xml 

response.Write oXML.selectSingleNode("//url").Text 
+0

И, как это не работает? Что вы получаете? Как вы думаете, что вы должны получить? Есть ли ошибка? –

+0

Большое спасибо за помощь. Я получаю сообщение об ошибке: msxml6.dll error '80004005' Попытка изменения узла только для чтения. , относящийся к строке: oXML.setProperty "SelectionNamespaces", "xmlns: fl = 'http: //api.freelancer.com/schemas/xml-0.1'" – tommarshallandrews

ответ

1

Неисправный пример имеет набор XML-пространства имен (xmlns="http://api.freelancer.com/schemas/xml-0.1").

Все элементы этого файла находятся в этом пространстве имен. Вы должны использовать его при выборе узлов.

Dim oXML, node 
Set oXML = Server.CreateObject("Msxml2.DOMDocument.6.0") 

oXML.load "http://api.freelancer.com/User/Properties.xml?id=sulung81" 
oXML.setProperty "SelectionNamespaces", "xmlns:fl='http://api.freelancer.com/schemas/xml-0.1'" 

Set node = oXML.selectSingleNode("/fl:profile/fl:url") 

If Not node Is Nothing 
    Response.Write node.Text 
End If 

Примечания

  • Вы можете использовать the .load() method, чтобы загрузить файл непосредственно из URL. Нет необходимости в дополнительном объекте ServerXMLHTTP.
  • Всегда проверяйте результат selectSingleNode() - это может быть Nothing.
  • Вы также должны проверить на parse errors.
  • Вы должны использовать префикс пространства имен, даже если документ не использует его. Вы можете выбрать любой префикс, который вам нравится, если совпадают URI пространства имен. В этом примере я выбрал fl.
  • Используйте специальные выражения XPath. /fl:profile/fl:url лучше, чем //fl:url.
+0

Большое спасибо за помощь в этом. Я получаю сообщение об ошибке – tommarshallandrews

Смежные вопросы