Стилизация XML через XSLT - PullRequest
       0

Стилизация XML через XSLT

1 голос
/ 09 ноября 2011

У меня есть документ XSLT, который выплевывает содержимое документа XML следующим образом:

    <?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">         
    <xsl:template match="/">    
    <html>
    <head>
        <title>CL Results</title>
        <link href="xml.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <h1>34 Participants</h1>
        <table>      
        <xsl:for-each select="results/person">      
            <tr>
                <th colspan="16">
                    <a>
                        <xsl:attribute name="href">
                            mailto:<xsl:value-of select="@epost" />
                        </xsl:attribute>
                        <xsl:value-of select="@name"/>
                    </a>
                </th>        
            </tr>      
            <xsl:for-each select="stage">
                <tr>                            
                    <xsl:for-each select="team">
                        <td><xsl:value-of select="."/></td>                         
                    </xsl:for-each>         
                </tr>
            </xsl:for-each>
       </xsl:for-each>
      </table>
     </body>
     </html>
    </xsl:template>
</xsl:stylesheet>

Я хочу дать элементам td, которые содержат определенные команды, разные стили.

Итак, мне нужен массив, содержащий, например, «Барселона», «Арсенал» и «Лион» (и многие другие), и всякий раз, когда элемент команды XML содержит один из них, я хочу, чтобы команда отображалась, например, в. красный цвет.

Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Вам лучше сопоставлять с шаблонами.

<xsl:for-each select="team">
    <td><xsl:apply-templates /></td>                         
</xsl:for-each>

<xsl:template match="team">
   <div class="normal"><xsl:value-of select="@name" /></div>
</xsl:template>

<xsl:template match="team[@name='Barelona' | @name='Lyon' | @name='Arsenal']">
   <div class="red"><xsl:value-of select="@name" /></div>
</xsl:template>

Или другой вариант - сохранить XML-файл относительно XSL и ссылаться на него с помощью функции document ().Поэтому, если бы у вас был файл с именем redTeams.xml, который выглядел так:

<redTeams>
    <team name="Barcelona" />
    <team name="Arsenal" />
    <team name="Lyon" />
</redTeams>

Вы могли бы сослаться на него примерно так:

<xsl:template match="team[@name = document('redTeams.xml')/redTeams/team/@name]">
   <div class="red"><xsl:value-of select="@name" /></div>
</xsl:template>

Или если вам нужно сделать это программноВы также можете передать переменную в XSL с помощью xsl: param и сопоставить ее.

1 голос
/ 09 ноября 2011

Я полагаю, вы ссылаетесь на эту часть вашего xsl-преобразования:

<xsl:for-each select="team">
    <td><xsl:value-of select="."/></td>                         
</xsl:for-each>       

Вы можете использовать условные выражения:

<xsl:for-each select="team">
    <xsl:variable name="color">
      <xsl:choose>
        <xsl:when test=". = 'Barcelona'">
          red
        </xsl:when>
        <xsl:when test=". = 'Arsenal'">
          blue
        </xsl:when>
        <xsl:otherwise>
          yellow
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <td style="color:{$color}">
      <xsl:value-of select="."/>
    </td>
  </xsl:for-each>
0 голосов
/ 10 ноября 2011

Попробуйте

<td class="{team}">

, а затем используйте таблицу стилей CSS, чтобы определить подходящий цвет для каждой команды. Лучше всего использовать XSLT, чтобы получить правильное структурное расположение HTML, и CSS для детальной стилизации каждого элемента HTML.

(Вы можете создавать таблицы стилей CSS, используя XSLT, если хотите, хотя я редко видел, чтобы это делалось на практике.)

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