2013-11-14 64 views
0

我正在尝试将一些XML抽取到旧网站的经典ASP中。在经典ASP中读取XML

我可以使它适用于一个例子,但不是另一个例子。我想知道是否有人能让我知道我需要做些什么才能让它们都运行。提前致谢。

工作实施例

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错误'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