2012-01-24 4 views
2

私が今までに持っているもの

私は自分のサイトのニュースフィードを作成していますが、現在これを持っています。私は私が私の読者に表示されるオブジェクトの量を制限したいこの Asp XMLフィードリーダー

のうち、必要なもの

<% 
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 
%> 

。今、すべての記事が表示されている、と私はので、私はこれを行うことについて移動する方法が分からない私がAspに新しい午前のみ、最初の4

を示すことによって制限したいです。

答えて

3

forループでカウンタを使用できますが、XPathを使用します。

選択言語をXPathに設定します。

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

が、代わりに

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

objRoot.getElementsByTagName("item") 

で要素を選択し、最初の4つが表示されます。

提案約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 
+0

+1と多くのupvotesに値する。 – Filburt

+0

これは私がStack Overflowで受け取った最高の答えでなければなりません。どうもありがとうございます。 – WhosDustin

関連する問題