通过 XSLT 设置 XML 样式

发布于 2024-12-14 16:39:01 字数 1632 浏览 0 评论 0原文

我有一个 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 元素提供不同的样式。

因此,我需要一个包含“Barcelona”、“Arsenal”和“Lyon”(还有更多)的数组,每当 XML 的 team 元素包含其中任何一个时,我希望该团队以红色等显示。

我该怎么做?

I have a XSLT document that spits out the contents of an XML document like this:

    <?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>

I wish to give the td elements that contain certain teams different styling.

So I need an array containing for instance "Barcelona", "Arsenal" and "Lyon" (plus many more), and whenever the team element of the XML contains either of these, I want the team to be displayed in e.g. red colour.

How do I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清晨说晚安 2024-12-21 16:39:15

尝试

<td class="{team}">

然后 使用 CSS 样式表为每个团队定义适当的颜色。最好使用 XSLT 来正确安排 HTML 的结构,并使用 CSS 来设置每个 HTML 元素的详细样式。

(如果需要,您也可以使用 XSLT 生成 CSS 样式表,尽管我在实践中很少看到这样做。)

Try

<td class="{team}">

and then use a CSS stylesheet to define the appropriate colour for each team. It's best to use XSLT to get the structural arrangement of the HTML right, and CSS for the detailed styling of each HTML element.

(You can generate the CSS stylesheets using XSLT as well if you want, though I've rarely seen it done in practice.)

离不开的别离 2024-12-21 16:39:12

你最好与模板匹配。

<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>

或者另一种选择是保留与 XSL 相关的 XML 文件并使用 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:param 将变量传递到 XSL 中并与之匹配。

You're better off matching with templates.

<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>

Or another option is to keep an XML file relative to the XSL and reference it using the document() function. So if you had a file called redTeams.xml that looked like this:

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

You could reference it with something like this:

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

Or if you need to do it programmatically, you could also pass a variable into the XSL using xsl:param and match against that.

旧人哭 2024-12-21 16:39:09

我假设您指的是 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>

I assume you are referring to this part of your xsl transform :

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

You can use conditionals :

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文