在经典 ASP 中解析高级 XML



我有以下多级XML树,我正在尝试解析。 我可以轻松获得第一级,但经过多次搜索后似乎无法弄清楚如何获得其他级别。 最终我们需要的是每个级别中数据的完整列表,遍历每篇文章以及获取文章 ID。 有人可以帮我吗?

.XML:

<search>
<numresults>26707</numresults>
<pagesize>20</pagesize>
<articles>
<article id="998">
<title>my title 1</title>
<url>www.google.com</url>
<attributes>
<performer>
<id>122</id>
<url>www.yahoo.com</url>
<name>Elvis</name>
</performer>
</attributes>
</article>
<article id="999">
<title>my title 2</title>
<url>www.microsoft.com</url>
<attributes>
<performer>
<id>123</id>
<url>www.aol.com</url>
<name>Aerosmith</name>
</performer>
</attributes>
</article>
</articles>
</search>

以下是我所拥有的可以使 XML 获得一级

Set objXML = CreateObject("Microsoft.XMLDOM")
Set objEvents = CreateObject("Microsoft.XMLDOM")
objXML.async = False
objXML.setProperty "ServerHTTPRequest", true
objXML.Load (sURL)
'CaSe sensitive
Set objEvents = objXML.getElementsByTagName("article")
NumEvents = objEvents.length 'zero based
Response.Write NumEvents
c = 0
Do Until c = NumEvents
Set objEventDetails = objEvents.item(c)
Title = Trim(objEventDetails.childNodes(0).text)
Response.Write Title & "<br>"
c = c + 1
Loop 'main XML feed loop
Set objEvents = Nothing
Set objXML = Nothing

任何帮助将不胜感激!

使用 XPath 而不是抓取下一个孩子。

下面是一个示例

Set xml = CreateObject("Msxml2.DOMDocument")
xml.Async = "False"
xml.Load("search.xml")
strReturn = ""
for each ndArticle in xml.selectNodes( "//article" )
strReturn = strReturn + ndArticle.getAttribute( "id" ) + vbCrLf 
for each ndChild in ndArticle.selectNodes(".//" )
if ndChild.nodeName <> "#text"  then
strLast = ndChild.nodeName
else 
strReturn = strReturn + strLast + "=" + ndChild.nodeTypedValue + "<br/>" + vbCrLf
end if
next
next
WScript.Echo strReturn 

它创造了

998
title=my title 1<br/>
url=www.google.com<br/>
id=122<br/>
url=www.yahoo.com<br/>
name=Elvis<br/>
999
title=my title 2<br/>
url=www.microsoft.com<br/>
id=123<br/>
url=www.aol.com<br/>
name=Aerosmith<br/>

如果其他人有这个问题,这就是我解决它的方式。 请参阅此帖子:

如何解决"指定资源下载失败"错误?

底部的最后一条评论对我有用。 从与脚本相同的目录调用我的 URL 时出现问题(我知道,完全忘记了 - 新手错误(,然后抛出"指定资源的下载失败"的另一个错误,导致我找到这个解决方案。

我认为我的服务器上有一个安全功能阻止威廉的代码在上面工作......

谢谢威廉的帮助!

最新更新