为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 XSLT 中嵌套元素以实现条件样式?

如何在 XSLT 中嵌套元素以实现条件样式?

C#
郎朗坤 2023-12-17 10:19:00
问题如何利用 XSL 提供由运行的代码确定的条件格式(例如,表行之间的增加或减少)?背景编辑: 这是一个使用 ASP.NET Core 作为审核外部资源运行状况的长期运行服务的主机来运行的 BackgroundService 实现。这可能是 .NET Core 缺乏 .NET Framework 中存在的一些功能的问题,所以我认为值得一提这个想法的开始是因为我正在寻找一种方法来制作一个简单的 HTML 模板,我的 C# 数据对象可以以一种简单而有效的方式映射到该模板,而无需操作 StringBuilder。怀着这样的希望,我找到了这个 StackOverflow 响应,它说 XSLT 将是一个很好的解决方案,而无需采用完整的 MVC 方法。这就是一切的开始(为简洁起见,进行了删节):<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  <xsl:output method="html" encoding="utf-8"/>  <xsl:template match='/Email'>    <html>      <head>        <style>          <xsl:value-of select="Styles"/>        </style>      </head>      <body>        <h1>Total</h1>        <table id="tblTotal" class="clsPositive">          <tr>            <th>Audit Date</th>            <th>Source 1</th>            <th>Source 2</th>            ...          </tr>          <xsl:for-each select="Total/ArrayOfElement/AuditElement">            <xsl:sort select="ReportDate" order="descending"/>            <tr>              <td><xsl:value-of select="ReportDate"/></td>              <td><xsl:value-of select="Source1CountFormatted"/> (<xsl:value-of select="Source1GrowthFormatted"/>)</td>              <td><xsl:value-of select="Source2CountFormatted"/> (<xsl:value-of select="Source2GrowthFormatted"/>)</td>              ...            </tr>          </xsl:for-each>        </table>      </body>    </html>  </xsl:template></xsl:stylesheet>有了这个,我有了一个想法,根据所表示的数据类型有条件地格式化增长百分比(您可以通过表上的类属性看到它的开头,我用它来确定增加或减少是否为正或消极的)。然而,当我尝试执行此操作时,Visual Studio 告诉我 XSL 格式错误:<td><xsl:value-of select="Source1CountFormatted"/> (<i class="<xsl:value-of select="Source1GrowthCss"/>"><xsl:value-of select="Source1GrowthFormatted"/> </i>)</td>
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

这里的语法是错误的:


<i class="<xsl:value-of select="Source1GrowthCss"/>">

要动态设置属性的值,您可以使用xsl:attribute,如下所示:


<i>

   <xsl:attribute name="class">

      <xsl:value-of select="Source1GrowthCss"/>

   </xsl:attribute>

</i>

但这是相当啰嗦的。理想的方法是使用“属性值模板”,它更清晰


<i class="{Source1GrowthCss}">

这里,大括号表示要计算表达式,而不是按字面输出。


查看完整回答
反对 回复 2023-12-17
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信