выберите два элемента из rss в xslt - PullRequest
2 голосов
/ 29 октября 2011

как я могу выбрать два элемента из файла xml rss

, следуя коду, получая по одному элементу за раз, я хочу получить два элемента за раз

что я должен вставить в select для выборавторой пункт

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" />

  <xsl:template match="/rss/channel">
    <div class="RSS_Gadget">

  <div class="RSS_Content">
        <ul id="widget">
      <xsl:apply-templates select="item"    />
     <!-- <xsl:apply-templates select="following-sibling::item" mode="extra"    />-->

    </ul>
  </div>
</div>
  </xsl:template>

<xsl:template match="item">
<li>
  <xsl:element name="a">
    <xsl:attribute name="href">
      <xsl:value-of select="link"/>
    </xsl:attribute>
    <xsl:attribute name="target">_blank</xsl:attribute>
    <xsl:value-of select="title"/>
  </xsl:element>
  <div class="RSS_Body" >
    <xsl:value-of select="description" disable-output-escaping="yes" />
  </div>

</li>

1 Ответ

2 голосов
/ 29 октября 2011

Заменить этот код :

  <xsl:template match="/rss/channel"> 
    <div class="RSS_Gadget"> 

  <div class="RSS_Content"> 
        <ul id="widget"> 
      <xsl:apply-templates select="item"    /> 
     <!-- <xsl:apply-templates select="following-sibling::item" mode="extra"    />--> 

    </ul> 
  </div> 
</div> 
  </xsl:template> 

<xsl:template match="item"> 
<li> 
  <xsl:element name="a"> 
    <xsl:attribute name="href"> 
      <xsl:value-of select="link"/> 
    </xsl:attribute> 
    <xsl:attribute name="target">_blank</xsl:attribute> 
    <xsl:value-of select="title"/> 
  </xsl:element> 
  <div class="RSS_Body" > 
    <xsl:value-of select="description" disable-output-escaping="yes" /> 
  </div> 

 </li>
</xsl:template> 

на :

  <xsl:template match="/rss/channel"> 
    <div class="RSS_Gadget"> 

  <div class="RSS_Content"> 
        <ul id="widget"> 
      <xsl:apply-templates select="item[position() mod 2 = 1]"    /> 
    </ul> 
  </div> 
</div> 
  </xsl:template> 

<xsl:template match="item"> 
<li> 
  <xsl:element name="a"> 
    <xsl:attribute name="href"> 
      <xsl:value-of select="link"/> 
    </xsl:attribute> 
    <xsl:attribute name="target">_blank</xsl:attribute> 
    <xsl:value-of select="title"/> 
  </xsl:element> 
  <div class="RSS_Body" > 
    <xsl:value-of select="description" disable-output-escaping="yes" /> 
  </div> 

 </li> 

 <xsl:apply-templates select="following-sibling::item[1]" mode="extra"/>
</xsl:template> 

Пояснение :

Эта инструкция:

      <xsl:apply-templates select="item[position() mod 2 = 1]"    /> 

Применяет шаблоны к первому элементу item каждой пары двух смежных item братьев и сестер (к 1st, 3rd, ... 2k+1st item child).

Затем в шаблоне, который соответствует элементу item, после обработки сопоставленного элемента применяется другой шаблон для / для обработки его ближайшего следующего брата:

 <xsl:apply-templates select="following-sibling::item[1]" mode="extra"/>

Примечание : Весьма вероятно, что вам не нужно использовать DOE (атрибут disable-output-escaping) в вашем коде.Всегда старайтесь избегать использования DOE, потому что это не является обязательной функцией XSLT (не все процессоры XSLT поддерживают и реализуют ее), и ее использование нарушает архитектурную модель XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...