2011-03-21 24 views
0

我需要將RSS查看器Web部件顯示爲JPMorgan Chase的股票行情。需要隱藏<a>從其他來源自動生成的代碼

我發現的RSS訂閱源是:http://www.quoterss.com/quote.php?symbol=JPM&format=0&uid=1280868448,但是他的訂閱源也回顧了不必要的鏈接,例如FaceBook作弊碼,iPhone作弊碼......我想隱藏那些作弊碼的不必要鏈接。

具有上述提要的RSS查看器Web部件的XSLT提供如下。

<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" 
       version="1.0" exclude-result-prefixes="xsl ddwrt msxsl rssaggwrt" 
       xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" 
       xmlns:rssaggwrt="http://schemas.microsoft.com/WebParts/v3/rssagg/runtime" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
       xmlns:rssFeed="urn:schemas-microsoft-com:sharepoint:RSSAggregatorWebPart" 
       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" 
       xmlns:rss1="http://purl.org/rss/1.0/" xmlns:atom="http://www.w3.org/2005/Atom" 
       xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" 
       xmlns:atom2="http://purl.org/atom/ns#"> 

    <xsl:param name="rss_FeedLimit">5</xsl:param> 
    <xsl:param name="rss_ExpandFeed">false</xsl:param> 
    <xsl:param name="rss_LCID">1033</xsl:param> 
    <xsl:param name="rss_WebPartID">RSS_Viewer_WebPart</xsl:param> 
    <xsl:param name="rss_alignValue">left</xsl:param> 
    <xsl:param name="rss_IsDesignMode">True</xsl:param> 

     <xsl:template match="rss"> 
      <xsl:call-template name="RSSMainTemplate"/> 
     </xsl:template> 

     <xsl:template match="rdf:RDF"> 
      <xsl:call-template name="RDFMainTemplate"/> 
     </xsl:template> 

     <xsl:template match="atom:feed"> 
      <xsl:call-template name="ATOMMainTemplate"/> 
     </xsl:template> 

     <xsl:template match="atom2:feed"> 
      <xsl:call-template name="ATOM2MainTemplate"/> 
     </xsl:template> 

     <xsl:template name="RSSMainTemplate" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:variable name="Rows" select="channel/item"/> 
      <xsl:variable name="RowCount" select="count($Rows)"/> 
      <div class="slm-layout-main" >    
      <div class="groupheader item medium"> 
         <a href="{ddwrt:EnsureAllowedProtocol(string(channel/link))}"> 
          <xsl:value-of select="channel/title"/> 
         </a> 
      </div>    
      <xsl:call-template name="RSSMainTemplate.body"> 
       <xsl:with-param name="Rows" select="$Rows"/> 
       <xsl:with-param name="RowCount" select="count($Rows)"/> 
      </xsl:call-template> 
      </div> 
     </xsl:template> 

     <xsl:template name="RSSMainTemplate.body" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="Rows"/> 
      <xsl:param name="RowCount"/> 
      <xsl:for-each select="$Rows"> 
       <xsl:variable name="CurPosition" select="position()" /> 
       <xsl:variable name="RssFeedLink" select="$rss_WebPartID" /> 
       <xsl:variable name="CurrentElement" select="concat($RssFeedLink,$CurPosition)" /> 
       <xsl:if test="($CurPosition &lt;= $rss_FeedLimit)"> 
        <div class="item link-item" > 
          <a href="{concat(&quot;javascript:ToggleItemDescription('&quot;,$CurrentElement,&quot;')&quot;)}" > 
           <xsl:value-of select="title"/> 
          </a> 
          <xsl:if test="$rss_ExpandFeed = true()"> 
           <xsl:call-template name="RSSMainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:block;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
          </xsl:if> 
          <xsl:if test="$rss_ExpandFeed = false()"> 
           <xsl:call-template name="RSSMainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:none;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
          </xsl:if> 
        </div>        
       </xsl:if> 
      </xsl:for-each> 
     </xsl:template> 

    <xsl:template name="RSSMainTemplate.description" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="DescriptionStyle"/> 
      <xsl:param name="CurrentElement"/> 
     <div id="{$CurrentElement}" class="description" align="$rss_alignValue" style="{$DescriptionStyle} text-align:{$rss_alignValue};"> 
       <xsl:choose> 
        <!-- some RSS2.0 contain pubDate tag, some others dc:date --> 
        <xsl:when test="string-length(pubDate) &gt; 0"> 
         <xsl:variable name="pubDateLength" select="string-length(pubDate) - 3" /> 
       <xsl:value-of select="ddwrt:FormatDate(substring(pubDate,0,$pubDateLength),number($rss_LCID),3)"/> 
        </xsl:when> 
        <xsl:otherwise> 
         <xsl:value-of select="ddwrt:FormatDate(dc:date,number($rss_LCID),3)"/> 
        </xsl:otherwise> 
       </xsl:choose> 

       <xsl:if test="string-length(description) &gt; 0"> 
        <xsl:variable name="SafeHtml"> 
         <xsl:call-template name="GetSafeHtml"> 
          <xsl:with-param name="Html" select="description"/> 
         </xsl:call-template> 
        </xsl:variable> 
         <xsl:value-of select="$SafeHtml" disable-output-escaping="no"/> 
       </xsl:if> 
      <div class="description"> 
       <a href="{ddwrt:EnsureAllowedProtocol(string(link))}">More...</a> 
      </div> 
     </div> 
     </xsl:template> 


     <xsl:template name="RDFMainTemplate" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:variable name="Rows" select="rss1:item"/> 
      <xsl:variable name="RowCount" select="count($Rows)"/> 
      <div class="slm-layout-main" > 
      <div class="groupheader item medium"> 
       <a href="{ddwrt:EnsureAllowedProtocol(string(rss1:channel/rss1:link))}"> 
        <xsl:value-of select="rss1:channel/rss1:title"/> 
       </a> 
      </div>    
      <xsl:call-template name="RDFMainTemplate.body"> 
       <xsl:with-param name="Rows" select="$Rows"/> 
       <xsl:with-param name="RowCount" select="count($Rows)"/> 
      </xsl:call-template> 
      </div> 
     </xsl:template> 

     <xsl:template name="RDFMainTemplate.body" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="Rows"/> 
      <xsl:param name="RowCount"/> 
      <xsl:for-each select="$Rows"> 
       <xsl:variable name="CurPosition" select="position()" /> 
       <xsl:variable name="RssFeedLink" select="$rss_WebPartID" /> 
       <xsl:variable name="CurrentElement" select="concat($RssFeedLink,$CurPosition)" /> 
       <xsl:if test="($CurPosition &lt;= $rss_FeedLimit)"> 
        <div class="item link-item" > 
         <a href="{concat(&quot;javascript:ToggleItemDescription('&quot;,$CurrentElement,&quot;')&quot;)}" > 
          <xsl:value-of select="rss1:title"/> 
         </a> 
         <xsl:if test="$rss_ExpandFeed = true()"> 
           <xsl:call-template name="RDFMainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:block;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
         </xsl:if> 
         <xsl:if test="$rss_ExpandFeed = false()"> 
           <xsl:call-template name="RDFMainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:none;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
         </xsl:if> 
        </div> 
     </xsl:if> 
      </xsl:for-each> 
     </xsl:template> 

    <xsl:template name="RDFMainTemplate.description" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="DescriptionStyle"/> 
      <xsl:param name="CurrentElement"/> 
     <div id="{$CurrentElement}" class="description" align="$rss_alignValue" style="{$DescriptionStyle} text-align:{$rss_alignValue};"> 
      <xsl:value-of select="ddwrt:FormatDate(dc:date,number($rss_LCID),3)"/> 
       <xsl:if test="string-length(rss1:description) &gt; 0"> 
        <xsl:variable name="SafeHtml"> 
         <xsl:call-template name="GetSafeHtml"> 
          <xsl:with-param name="Html" select="rss1:description"/> 
         </xsl:call-template> 
        </xsl:variable> 
        - <xsl:value-of select="$SafeHtml" disable-output-escaping="yes"/> 
       </xsl:if> 
      <div class="description"> 
       <a href="{ddwrt:EnsureAllowedProtocol(string(rss1:link))}">More...</a> 
      </div> 
     </div> 
     </xsl:template> 


     <xsl:template name="ATOMMainTemplate" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:variable name="Rows" select="atom:entry"/> 
      <xsl:variable name="RowCount" select="count($Rows)"/> 
      <div class="slm-layout-main" > 
      <div class="groupheader item medium"> 
       <a href="{ddwrt:EnsureAllowedProtocol(string(atom:link/@href))}"> 
        <xsl:value-of select="atom:title"/> 
       </a> 
      </div>    
      <xsl:call-template name="ATOMMainTemplate.body"> 
       <xsl:with-param name="Rows" select="$Rows"/> 
       <xsl:with-param name="RowCount" select="count($Rows)"/> 
      </xsl:call-template> 
      </div> 
     </xsl:template> 

     <xsl:template name="ATOMMainTemplate.body" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="Rows"/> 
      <xsl:param name="RowCount"/> 
      <xsl:for-each select="$Rows"> 
       <xsl:variable name="CurPosition" select="position()" /> 
       <xsl:variable name="RssFeedLink" select="$rss_WebPartID" /> 
       <xsl:variable name="CurrentElement" select="concat($RssFeedLink,$CurPosition)" /> 
       <xsl:if test="($CurPosition &lt;= $rss_FeedLimit)"> 
          <div class="item link-item" > 
           <a href="{concat(&quot;javascript:ToggleItemDescription('&quot;,$CurrentElement,&quot;')&quot;)}" > 
            <xsl:value-of select="atom:title"/> 
           </a> 
          <xsl:if test="$rss_ExpandFeed = true()"> 
           <xsl:call-template name="ATOMMainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:block;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
          </xsl:if> 
          <xsl:if test="$rss_ExpandFeed = false()"> 
           <xsl:call-template name="ATOMMainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:none;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
          </xsl:if> 
          </div> 
     </xsl:if> 
      </xsl:for-each> 
     </xsl:template> 

    <xsl:template name="ATOMMainTemplate.description" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="DescriptionStyle"/> 
      <xsl:param name="CurrentElement"/> 
     <div id="{$CurrentElement}" class="description" align="$rss_alignValue" style="{$DescriptionStyle} text-align:{$rss_alignValue};"> 
     <xsl:value-of select="ddwrt:FormatDate(atom:updated,number($rss_LCID),3)"/> 
       <xsl:choose> 
        <xsl:when test="string-length(atom:summary) &gt; 0"> 
         <xsl:variable name="SafeHtml"> 
          <xsl:call-template name="GetSafeHtml"> 
           <xsl:with-param name="Html" select="atom:summary"/> 
          </xsl:call-template> 
         </xsl:variable> 
         - <xsl:value-of select="$SafeHtml" disable-output-escaping="yes"/> 
        </xsl:when> 
        <xsl:when test="string-length(atom:content) &gt; 0"> 
         <xsl:variable name="SafeHtml"> 
          <xsl:call-template name="GetSafeHtml"> 
           <xsl:with-param name="Html" select="atom:content"/> 
          </xsl:call-template> 
         </xsl:variable> 
         - <xsl:value-of select="$SafeHtml" disable-output-escaping="yes"/> 
        </xsl:when> 
       </xsl:choose> 
      <div class="description"> 
        <a href="{ddwrt:EnsureAllowedProtocol(string(atom:link/@href))}">More...</a> 
      </div> 
     </div> 
     </xsl:template> 

     <xsl:template name="ATOM2MainTemplate" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:variable name="Rows" select="atom2:entry"/> 
      <xsl:variable name="RowCount" select="count($Rows)"/> 
      <div class="slm-layout-main" > 
      <div class="groupheader item medium">     
       <a href="{ddwrt:EnsureAllowedProtocol(string(atom2:link/@href))}"> 
        <xsl:value-of select="atom2:title"/> 
       </a> 
      </div> 
      <xsl:call-template name="ATOM2MainTemplate.body"> 
       <xsl:with-param name="Rows" select="$Rows"/> 
       <xsl:with-param name="RowCount" select="count($Rows)"/> 
      </xsl:call-template> 
      </div> 
     </xsl:template> 

     <xsl:template name="ATOM2MainTemplate.body" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="Rows"/> 
      <xsl:param name="RowCount"/> 
      <xsl:for-each select="$Rows"> 
       <xsl:variable name="CurPosition" select="position()" /> 
       <xsl:variable name="RssFeedLink" select="$rss_WebPartID" /> 
       <xsl:variable name="CurrentElement" select="concat($RssFeedLink,$CurPosition)" /> 
       <xsl:if test="($CurPosition &lt;= $rss_FeedLimit)"> 
        <div class="item link-item" > 
           <a href="{concat(&quot;javascript:ToggleItemDescription('&quot;,$CurrentElement,&quot;')&quot;)}" > 
            <xsl:value-of select="atom2:title"/> 
           </a> 
          <xsl:if test="$rss_ExpandFeed = true()"> 
           <xsl:call-template name="ATOM2MainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:block;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
          </xsl:if> 
          <xsl:if test="$rss_ExpandFeed = false()"> 
           <xsl:call-template name="ATOM2MainTemplate.description"> 
            <xsl:with-param name="DescriptionStyle" select="string('display:none;')"/> 
            <xsl:with-param name="CurrentElement" select="$CurrentElement"/> 
           </xsl:call-template> 
          </xsl:if> 
        </div> 
     </xsl:if> 
      </xsl:for-each> 
     </xsl:template> 

    <xsl:template name="ATOM2MainTemplate.description" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> 
      <xsl:param name="DescriptionStyle"/> 
      <xsl:param name="CurrentElement"/> 
     <div id="{$CurrentElement}" class="description" align="$rss_alignValue" style="{$DescriptionStyle} text-align:{$rss_alignValue};"> 
      <xsl:value-of select="ddwrt:FormatDate(atom2:updated,number($rss_LCID),3)"/> 
       <xsl:choose> 
        <xsl:when test="string-length(atom2:summary) &gt; 0"> 
         <xsl:variable name="SafeHtml"> 
          <xsl:call-template name="GetSafeHtml"> 
           <xsl:with-param name="Html" select="atom2:summary"/> 
          </xsl:call-template> 
         </xsl:variable> 
         - <xsl:value-of select="$SafeHtml" disable-output-escaping="yes"/> 
        </xsl:when> 
        <xsl:when test="string-length(atom2:content) &gt; 0"> 
         <xsl:variable name="SafeHtml"> 
          <xsl:call-template name="GetSafeHtml"> 
           <xsl:with-param name="Html" select="atom2:content"/> 
          </xsl:call-template> 
         </xsl:variable> 
         - <xsl:value-of select="$SafeHtml" disable-output-escaping="yes"/> 
        </xsl:when> 
       </xsl:choose> 
      <div class="description"> 
       <a href="{ddwrt:EnsureAllowedProtocol(string(atom2:link/@href))}">More...</a> 
      </div> 
     </div> 
     </xsl:template> 

     <xsl:template name="GetSafeHtml"> 
      <xsl:param name="Html"/> 
      <xsl:choose> 
       <xsl:when test="$rss_IsDesignMode = 'True'"> 
        <xsl:value-of select="$Html"/> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:value-of select="rssaggwrt:MakeSafe($Html)"/> 
       </xsl:otherwise> 
      </xsl:choose> 
     </xsl:template> 

</xsl:stylesheet> 

從上面的XSLT我能弄清楚,HTML是自動生成的,做到這一點通過

 <xsl:template name="GetSafeHtml"> 
      <xsl:param name="Html"/> 
      <xsl:choose> 
       <xsl:when test="$rss_IsDesignMode = 'True'"> 
        <xsl:value-of select="$Html"/> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:value-of select="rssaggwrt:MakeSafe($Html)"/> 
       </xsl:otherwise> 
      </xsl:choose> 
     </xsl:template> 

如果我在正確的方向我要去,如果是自動生成HTML,我將無法使用XSL隱藏這些不必要的鏈接。所以我試圖用JQuery來做到這一點。

自動生成的HTML如下。

<table border=0 cellspacing=0 cellpadding=1 width=150><tr><td bgcolor="#000000"> <table border=0 cellspacing=0 cellpadding=0 width="100%" class="pq_all"> <tr bgcolor="#DDDDDD"><td width="100%" align=CENTER colspan=3 nowrap> </td></tr> <tr bgcolor="#EEEEEE"><td width="100%" nowrap>&nbsp;Last </td> <td width="40%" nowrap align=right>45.74</td></tr> <tr bgcolor="#DDDDDD"><td width="100%" nowrap>&nbsp;Change </td> <td width="40%" nowrap align=right><font color="#409940">+1.18</font>&nbsp;</td></tr> <tr bgcolor="#EEEEEE"><td width="100%" nowrap>&nbsp;% Change </td> <td width="40%" nowrap align=right><font color="#409940">2.65%</font>&nbsp;</td></tr> <tr bgcolor="#DDDDDD"><td width="100%" nowrap>&nbsp;Volume </td> <td width="40%" nowrap align=right>77445704&nbsp;</td></tr> <tr bgcolor="#EEEEEE"><td width="100%" nowrap>&nbsp;Last </td> <td width="40%" nowrap align=right>4:02pm&nbsp;</td></tr> </table> </td></tr></table> _<div><a href="http://cheatcodes.com/iphone/">iPhone Cheat Codes</a></div>_ 

我想隱藏含參照其呈現爲斜體字「iPhone祕籍」的http:.//cheatcodes.com/iphone/的鏈接。 通過使用jQuery我試過

$('a[href*=http://cheatcodes.com]').hide() 

......但這不工作。我也試圖鑽研它,當我試圖使用

alert($('a[href*=http://cheatcodes.com]')).attr(href) 

獲取href標記的價值JQuery的顯示我不確定結果。此外,作弊代碼的鏈接也每天更新...只有我發現的東西是URL的這部分保持不變:http:。//cheatcodes.com/...根據我的理解作爲HTML會自動生成JQuery無法隱藏該錨標記。

我有點陷入困境。如果有人告訴我行爲和解決方案的確切原因,我真的很感激。此外,如果有人知道其他RSS Feed,我可以獲得JPMorgan Chase的股票報價將有助於克服此問題。

感謝, Dhaval

+0

請格式化您的代碼時儘量用力。在我編輯之前,您的帖子無法閱讀。 (並且它還不是很好。) – 2011-03-21 05:16:55

+1

第一條規則是絕對不要使用你不明白的XSLT代碼。另外,這根本不是* XSLT問題,因爲'rssaggwrt:MakeSafe($ Html)'函數返回的是一個字符串 - 而不是一個(格式良好的)XML片段。在這種情況下,XSLT必須像普通的文本編輯器一樣使用,而不是像樹處理器。一種進行的方式不是完全調用該擴展函數,而是編寫自己的XSLT代碼來生成安全的XHTML並過濾不需要的鏈接。 – 2011-03-21 13:14:15

+0

你想要一個答案嗎?真? – 2011-03-23 00:03:52

回答

0

你嘗試alert($('a[href*="http://cheatcodes.com"]')).attr(href)