2014-12-01 124 views
0

我正在使用rss feed獲取新聞項目,然後使用XSLT將它們顯示給用戶。但rss feed在描述節點中有<br>標籤。我想刪除它們,以便正確包裝文本。從RSS提要正在刪除<br>來自rss feed的標記

XML:

<item> 
     <title>This is sample text</title> 
     <link>http://service.meltwaternews.com/mnews/redirect.html?docId=3724026852&amp;userId=327550&amp;cId=88306&amp;agentId=5799665&amp;type=1&amp;s=83181&amp; 
url=http%3A%2F%2Fwww.law360.com%2Farticles%2F596778</link> 
     <description>M&amp;A MVP: &lt;b&gt;Wachtell&lt;/b&gt;'s Andy Brownstein -- Thanks to his work over the past&lt;br&gt; year 
guiding numerous multibillion-dollar deals that spanned a number&lt;br&gt;...&lt;br&gt;</description> 
     <pubDate>Thu, 20 Nov 2014 18:20:42 GMT</pubDate> 
     <source url="http://www.law360.com/">Law360</source> 
     </item> 
     <item> 
     <title>BGC Partners Extends Tender Offer To Acquire GFI Group</title> 
     <link>http://service.meltwaternews.com/mnews/redirect.html?docId=3723113040&amp; 
userId=327550&amp;cId=88306&amp;agentId=5799665&amp;type=1&amp;s=54&amp; 
url=http%3A%2F%2Fwww.prnewswire.com%2Fnews-releases%2Fbgc-partners-extends-tender-offer-to-acquire-gfi-group-283330231.html</link> 
     <description>...for the tender offer is Cantor Fitzgerald 
&amp; Co. and its legal advisor&lt;br&gt; is &lt;b&gt;Wachtell&lt;/b&gt;, &lt;b&gt;Lipton&lt;/b&gt;, Rosen &amp; Katz. About BGC Partners, Inc. BGC Partners&lt;br&gt;...&lt;br&gt;</description> 
     <pubDate>Thu, 20 Nov 2014 13:56:48 GMT</pubDate> 
     <source url="http://www.prnewswire.com/">PR Newswire</source> 
     </item> 

XSLT:

<?xml version='1.0' encoding='UTF-8'?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:msdndomain="http://msdn.microsoft.com/aboutmsdn/rss/domains" 
    version="1.0" > 


<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match='node()|@*'> 
    <xsl:copy> 
     <xsl:apply-templates select='node()|@*'/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match='br[preceding-sibling::node()[1] 
    [not(self::text() and normalize-space(.) = "")][self::br]]'/> 





<xsl:param name="maxitems">30</xsl:param> 
<xsl:param name="showtitle">False</xsl:param> 
<xsl:param name="totalitems"><xsl:value-of select="count(/rss/channel/item)"/></xsl:param> 
     <xsl:param name = "Postback.CNUSERPAGE" >0</xsl:param> 
    <xsl:param name = "ITEMSPERPAGE" >5</xsl:param> 




    <xsl:template match='/rss'> 

     <xsl:if test="count(channel/item) &gt; number($ITEMSPERPAGE)"> 
      <xsl:text disable-output-escaping="yes">&lt;SCRIPT&gt; 
      function getNewPagingUrl(parameter, pageNum) { var parms = document.URL.split(/[&amp;?]/); if (parms.length &lt; 2) {  return document.URL + "?" + parameter + "=" + pageNum; } else {  var finalParms = new Array();var fnd = false; for (var i=0; i&lt;parms.length;i++) {  if (parms[i].search(parameter+"=") != -1)  {   fnd=true;finalParms[i] = parameter + "=" + pageNum;   }  else  {   finalParms[i] = parms[i];  } } if(!fnd){finalParms[parms.length]=parameter + "=" + pageNum;} 
    var finalUrl = ""; for (var i=0; i&lt;finalParms.length;i++) {  if (i==0)   finalUrl += finalParms[i];  else if (i==1)   finalUrl += "?" + finalParms[i];  else   finalUrl += "&amp;" + finalParms[i]; } return finalUrl; } } 
      &lt;/SCRIPT&gt; 
     </xsl:text> 
      <xsl:text disable-output-escaping="yes">&lt;TABLE width="100%" &gt;&lt;TR&gt;&lt;TD align="right"&gt;</xsl:text> 

<xsl:variable name="ttlPages"> 
<xsl:choose> 
     <xsl:when test="count(channel/item) &gt; $maxitems"> 
      <xsl:value-of select="$maxitems"/> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="count(channel/item)"/>  
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
      <xsl:call-template name="paging"> 
       <xsl:with-param name="repeat" select="floor($ttlPages div number($ITEMSPERPAGE))"/> 
       <xsl:with-param name="totalPages" select="floor($ttlPages div number($ITEMSPERPAGE))"/> 
      </xsl:call-template> 
      <xsl:text disable-output-escaping="yes">&lt;/TABLE&gt;</xsl:text> 
     </xsl:if> 
     <div id='block' style="padding:5px;"> 
      <xsl:if test="$showtitle='True'"> 
       <div style="font-size:100%;"> 
        <xsl:value-of select='channel/title'/> 
       </div> 
       <hr style="height:1px;color:black;" /> 
      </xsl:if> 

      <xsl:apply-templates select='channel/item[position()&lt;=$maxitems]'/> 

      </div> 
    </xsl:template> 

    <xsl:template match='item'> 
     <xsl:if test="floor((position()-1) div number($ITEMSPERPAGE)) = number($Postback.CNUSERPAGE)" > 

      <div style="font-weight:bold;font-size:8pt;"> 
      <a style="font-size: 8pt" href='{link} ' target="_blank"> 
       <xsl:value-of select='title'/> 
      </a> 
     </div> 
     <xsl:value-of select='description' disable-output-escaping='yes' /> 
     <i><xsl:value-of select='dc:creator' /> <xsl:value-of select='pubDate' /></i> 
     <br/> 
     <br/> 
     </xsl:if> 
    </xsl:template> 

    <xsl:template name="paging"> 

     <xsl:param name="totalPages">0</xsl:param> 
     <xsl:param name="repeat">0</xsl:param> 
     <xsl:if test="number($repeat) >= 1"> 

      <xsl:if test="($totalPages - $repeat) = number($Postback.CNUSERPAGE)"> 
       <xsl:value-of select="($totalPages - $repeat)+1"/> 
      </xsl:if> 

      <xsl:if test="($totalPages - $repeat) != number($Postback.CNUSERPAGE)"> 
       <a> 
        <xsl:attribute name="href"> 
         <xsl:text disable-output-escaping="yes">javascript:</xsl:text> 
         <postback> 
          <column name="CNUSERPAGE"> 
           <xsl:value-of select="($totalPages - $repeat)"/> 
          </column> 
         </postback> 
        </xsl:attribute> 

        <xsl:value-of select="($totalPages - $repeat) + 1"/> 
       </a> 
      </xsl:if> 
      <xsl:if test="number($repeat) > 1"> 
       <xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text> 
      </xsl:if> 

      <xsl:call-template name="paging"> 
       <xsl:with-param name="repeat" select="$repeat - 1"/> 
       <xsl:with-param name="totalPages" select="$totalPages"/> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 


</xsl:stylesheet> 

可有人請幫我這。如果您需要更多信息,請告訴我。

謝謝。

+2

「*但RSS源在描述節點
標記*。」不,這不是「T。轉義標籤不是標籤,並且它們不能通過XSLT指令進行匹配或選擇。您必須使用**字符串函數**來處理元素的文本內容。 – 2014-12-01 18:52:12

+0

謝謝邁克爾。我不認爲我理解得當。你能否詳細說明一下。 – user346514 2014-12-02 16:11:57

+0

請在回答問題後不要刪除您的問題:沒有它,答案就沒有意義。另見:http://stackoverflow.com/help/someone-answers – 2014-12-03 16:46:33

回答

0

請您詳細說明一下。

你叫什麼? 「<br> tags」 實際上是毫無意義的&lt;br&gt;(在XSLT方面意義)。將它們從描述中移除的唯一方法是使用字符串操作。如果您正在使用XSLT 1.0,然後調用遞歸命名模板移除該字符串的所有出現 - 比如:

<xsl:template name="remove"> 
    <xsl:param name="text"/> 
    <xsl:param name="searchString"/> 
    <xsl:choose> 
     <xsl:when test="contains($text,$searchString)"> 
      <xsl:value-of select="substring-before($text,$searchString)"/> 
      <xsl:call-template name="remove"> 
       <xsl:with-param name="text" select="substring-after($text,$searchString)"/> 
       <xsl:with-param name="searchString" select="$searchString"/> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$text"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
+0

我使用了你提供給我的模板並將其稱爲模板(更新了我的問題)。但我看不出有什麼改變。我做錯了什麼。我對XSLT的經驗非常少。請指導我,如果我做錯了什麼。 – user346514 2014-12-03 02:54:17

+0

您的更新XSTL是不完整的,所以我不能告訴 - 但有一點突出:而不是''你需要''。在這裏看到一個簡單的實現:http://www.xmlplayground.com/GRVHRN – 2014-12-03 06:49:26

+0

謝謝。我會試試這個,讓你知道。 – user346514 2014-12-03 12:07:47