Asp XML feed阅读器

时间:2012-01-24 16:29:46

标签: xml asp-classic rss-reader

到目前为止我有什么

我正在为我的网站创建新闻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 的新手,所以我不知道该怎么做。

1 个答案:

答案 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 )。

但是,某些选择方法仅返回节点对象( selectSingleNodegetNamedItem )。如果没有节点匹配,则返回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