2013-03-24 1 views
2

Я пытаюсь выбрать первые 5 пунктов из следующих RSS-каналы XML:Выберите первые 5 элементов из RSS канала с помощью XPath

<rss xmlns:RTgame="http://www.rottentomatoes.com/xmlns/rtnews/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> 
    <channel> 
    <item> 
     <pubDate>2013-03-22 16:45:10</pubDate> 
     <title> 
      Weekly Ketchup: Will Tom Cruise Be The Man From U.N.C.L.E.? 
     </title> 
     <link> 
     http://www.rottentomatoes.com/m/1927101/news/1927101/ 
     </link> 
     <description> 
      <![CDATA[ 
      This week's Ketchup includes movie development news for reboots of <em>Escape from New York</em>, <em>Hercules</em>, and <em>Pete's Dragon</em>, the next <em>X-Men</em> and <em>Captain America</em> movies, and new roles for Tom Cruise, Hugh Jackman, and Robert Redford. 
      ]]> 
     </description> 
     <guid> 
     http://www.rottentomatoes.com/m/1927101/news/1927101/ 
     </guid> 
     <atom:link rel="thumbnail" type="image/*" href="http://content6.flixster.com/movie/11/14/23/11142332_tmb.jpg"/> 
    </item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    <item>...</item> 
    etc. 
    </channel> 
</rss> 

Это мой XSLT-код, содержащий выражение Xpath:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" omit-xml-declaration="yes" indent="yes" media-type="text/html"/> 

<xsl:template match="rss/channel"> 
    <xsl:for-each select="item[position() < 6]"> 
     <xsl:variable name="link" select="link" /> 
     <a href="{$link}"><xsl:value-of select="title" /></a><br/> 
     <xsl:value-of select="description" disable-output-escaping="yes" /><br/> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

Я получаю пустую страницу без каких-либо результатов. Однако, если я сменил оператор с «<» на «>» или «=», я получу результаты, отображаемые на странице.

По какой-то причине он не работает с оператором «<», и я понятия не имею, почему.

ответ

4

Просто замените:

<xsl:for-each select="item[position() < 6]"> 

с:

<xsl:for-each select="item[position() &lt; 6]"> 

Объяснение:

Преобразование в XSLT является XML-документ. По определению в хорошо сформированном документе XML любой символ <, который не используется для обозначения стартового или конечного тега, должен быть экранирован.

+0

это безупречный! Я потратил более часа, пытаясь выяснить, что вызывает эту проблему. Хорошо знать о <персонаже, Димитрие. Спасибо за помощь. – Alex

+0

@Alex, добро пожаловать. –