2012-01-24 8 views
2

Что я до сих пор

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

<% 
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, поэтому я понятия не имею, как это сделать.

ответ

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 возвращает коллекцию элементов, которые имеют указанное имя/выражение. Если ни один узел не соответствует имени/выражению, возвращает пустой список/коллекцию, и он не вызывает ошибку при попытке выполнить итерацию ее изначально (Для каждого).

Но некоторые методы выбора возвращают объект узла (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 
+0

+1 и заслуживает гораздо большего внимания. – Filburt

+0

Это должен быть лучший ответ, который я когда-либо получал в Stack Overflow. Огромное спасибо. – WhosDustin

Смежные вопросы