Asp XML Feed Reader - PullRequest
       17

Asp XML Feed Reader

2 голосов
/ 24 января 2012

Что у меня есть до сих пор

Я создаю новостную ленту для своего сайта, и в настоящее время у меня есть это.

<%
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 Ответ

3 голосов
/ 25 января 2012

Можно сделать со счетчиком в цикле 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
...