我正在为我的网站创建新闻Feed,而且我现在有这个。
<%
TheFeed = "http://feeds.feedburner.com/Actsoft"
Set objXML = Server.CreateObject("Microsoft.XMLDOM")
objXML.Async = False
objXML.SetProperty "ServerHTTPRequest", True
objXML.ResolveExternals = True
objXML.ValidateOnParse = True
objXML.Load(TheFeed)
CellCount = 0
If (objXML.parseError.errorCode = 0) Then
Set objRoot = objXML.documentElement
If IsObject(objRoot) = False Then
Response.Write "There was an error retrieving the news feed"
Else
Set objItems = objRoot.getElementsByTagName("item")
If IsObject(objItems) = True Then
For Each objItem in objItems
On Error Resume Next
TheTitle = objItem.selectSingleNode("title").Text
TheLink = objItem.selectSingleNode("link").Text
Response.Write "<div class='article'>" &_
"<a href=" & TheLink & ">" & _
"<span>" & TheTitle & "</span>" & _
"</a>" & _
"</div>"
Next
End If
Set objItems = Nothing
End If
Else
Response.Write "There was an error retrieving the news feed"
End If
Set objXML = Nothing
%>
我想限制阅读器中显示的对象数量。现在正在显示每篇文章,我想通过仅显示前4个来限制。
我是 Asp 的新手,所以我不知道该怎么做。
答案 0 :(得分:3)
可以在for循环中使用计数器完成,但我想使用XPath。
将选择语言设置为 XPath 。
objXML.SetProperty "ServerHTTPRequest", True
objXML.SetProperty "SelectionLanguage", "XPath"
使用
选择元素objXML.selectNodes("//item[position() <= 4]")
代替
objRoot.getElementsByTagName("item")
然后,将显示前四个。
有关建议 If IsObject(objItems) ... etc
:
像 getElementsByTagName , selectNodes 这样的方法会返回具有指定名称/表达式的元素集合。
如果没有节点与名称/表达式匹配,则返回一个空列表/集合,当您尝试本机迭代它时,它不会导致错误( For Each )。
但是,某些选择方法仅返回节点对象( selectSingleNode,getNamedItem )。如果没有节点匹配,则返回Nothing
。
问题是,Nothing
也是一个对象。因此IsObject(Nothing)
总是返回true。
在这种情况下,你可以处理如下。
'On Error Resume Next
Set TheTitle = objItem.selectSingleNode("title")
Set TheLink = objItem.selectSingleNode("link")
If TheTitle Is Nothing Then TheTitle = "" Else TheTitle = TheTitle.Text
If TheLink Is Nothing Then TheLink = "" Else TheLink = TheLink.Text