2013-05-05 2 views
2

У меня есть файл XML, который открывается с файлом XSLT:XML с несколькими таблицами стилей XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="eventsoverview.xsl"?> 
<events> 
    <item> 
    <date>7/5/2013</date> 
    <time>18:00</time> 
    <title>Some title</title> 
    <location>Earth</location> 
    <id>505</id> 
    <category>Comedy</category> 
    <description>Some description</description> 
    </item> 
    <item> 
    <date>7/5/2013</date> 
    <time>18:00</time> 
    <title>Some title</title> 
    <location>Earth</location> 
    <id>506</id> 
    <category>Comedy</category> 
    <description>Some description</description> 
    </item> 
    <item> 
    <date>7/5/2013</date> 
    <time>18:00</time> 
    <title>Some title</title> 
    <location>Earth</location> 
    <id>507</id> 
    <category>Comedy</category> 
    <description>Some description</description> 
    </item> 
</events> 

eventsoverview.xsl:

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

    <xsl:template match="/"> 
     <html> 
      <body style="background-color:#EFEFEF;"> 
       <xsl:for-each select="events/item"> 
        <ul> 
         <li> 
          <h2 style="color:#9C5D00;"> 
           <xsl:value-of select="title"/> 
          </h2> 
          <p> 
           <xsl:value-of select="description"/> 
          </p> 
         </li> 
        </ul> 
        <hr/> 
       </xsl:for-each> 
      </body> 
     </html> 
    </xsl:template> 

</xsl:stylesheet> 

Прямо сейчас, это XSLT отображает краткие данные о событие. Что я хочу сделать, так это то, что когда я нажимаю на событие, он должен отображать информацию о событии , используя тот же файл xml. Как мне это сделать? Можно ли это сделать с помощью нескольких файлов xslt?

ответ

1

В следующем примере я предполагаю, что щелчок на событии вызывает страницу с параметром Get-Parameter id, содержащим идентификатор события. Вам понадобится логика на стороне сервера, чтобы вставить этот идентификатор в ваш XSL (параметр eventid в моем примере). Конечно, вы также можете вставить этот параметр в XML.

Если eventid != 0 вы видите информацию о событиях с соответствующим ID. В моем примере отображаются сведения о событии 506.

Если eventid = 0 вы видите список событий.

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

    <xsl:param name="eventid">506</xsl:param> 

    <xsl:template match="/"> 
     <html> 
      <body style="background-color:#EFEFEF;"> 
       <xsl:choose> 
        <xsl:when test="$eventid = 0"> 
         <xsl:apply-templates/> 
        </xsl:when> 
        <xsl:when test="$eventid != 0"> 
         <xsl:apply-templates select="/events/item"/> 
        </xsl:when> 
       </xsl:choose> 
      </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="/events/item"> 
     <xsl:if test="id/text() = $eventid"> 
      <div> 
       <h2 style="color:#9C5D00;"> 
        <xsl:value-of select="title"/> 
       </h2> 
       <p>Description: <xsl:value-of select="description"/> 
       </p> 
       <p>Time: <xsl:value-of select="time"/> 
       </p> 
       <p>Location: <xsl:value-of select="location"/> 
       </p> 
       <p>ID: <xsl:value-of select="id"/></p> 
       <p>Category: <xsl:value-of select="category"/> 
       </p> 
      </div> 
      <hr/> 
     </xsl:if> 
    </xsl:template> 

    <xsl:template match="/events"> 
     <xsl:for-each select="item"> 
      <ul> 
       <li> 
        <h2 style="color:#9C5D00;"> 
         <xsl:value-of select="title"/> 
        </h2> 
        <p> 
         <xsl:value-of select="description"/> 
        </p> 
        <xsl:element name="a"> 
         <xsl:attribute name="href">?id=<xsl:value-of select="id"/> 
         </xsl:attribute>more</xsl:element> 
       </li> 
      </ul> 
      <hr/> 
     </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 
0

С клиентским XSLT я бы предложил создать XSLT-код HTML с Javascript, который скрывает, соответственно, показывает детали при возникновении события клика.

2

Если вы хотите сделать что-то немного более сложное, чем просто используя тот же XSLT, чтобы сделать то же XML каждый раз, команда xml-stylesheet обработки выдыхается.

Вам нужно будет использовать API Javascript для вызова преобразований - или, еще лучше, посмотрите на Saxon-CE, что позволяет вам писать все приложение, включая взаимодействие и обработку событий в XSLT.

Смежные вопросы