2012-01-24 108 views
2

我至今

我創造了我的網站的新聞飼料,我現在有這個。天冬氨酸XML 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所以我不知道如何去做這件事。

回答

3

可以用for循環中的計數器完成,但我想使用XPath

將選擇語言設置爲XPath

objXML.SetProperty "ServerHTTPRequest", True 
objXML.SetProperty "SelectionLanguage", "XPath" 

objXML.selectNodes("//item[position() <= 4]") 

代替

objRoot.getElementsByTagName("item") 

然後選擇的元素,前四個將被顯示。

有人建議約If IsObject(objItems) ... etc

的方法,例如像getElementsByTagNameselectNodes返回具有指定名稱/表達元件的集合。 如果沒有節點與名稱/表達式匹配,則返回一個空列表/集合,並且當您嘗試本地迭代它時不會導致錯誤(對於每個,都可以使用)。

但是,某些選擇方法僅返回節點對象(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並值得更多upvotes。 – Filburt

+0

這必須是我在Stack Overflow上收到的最好答案。非常感謝。 – WhosDustin