【问题标题】:XML/XSL to HTML tableXML/XSL 到 HTML 表
【发布时间】:2009-09-24 01:25:02
【问题描述】:

有人可以帮我从我的行循环中获取 columndefinition/column/cssclass 的值吗?

因此,在我的 xsl 中,我想在我的“行”forloop 期间为同一列位置拉入 cssclass,并将其放入我的

希望这是有道理的。谁能帮我解决这个问题?

谢谢。

我的 XML 看起来像这样:

<report>
  <columndefinition>
    <column>
      <headertext>Test Column 1</headertext>
      <cssclass>test1</cssclass>
    </column>
    <column>
      <headertext>Test Column 2</headertext>
      <cssclass>test2</cssclass>
    </column>
  </columndefinition>
  <rows>
    <row>
      <column>3</column>
      <column>11/04/2002</column>
    </row>
    <row>
      <column>22</column>
      <column>04/15/2003</column>
    </row>
    <row>
      <column>134</column>
      <column>04/15/2003</column>
    </row>
    <row>
      <column>63</column>
      <column>11/03/2004</column>
    </row>
    <row>
      <column>65</column>
      <column>11/03/2004</column>
    </row>
    <row>
      <column>66</column>
      <column>11/03/2004</column>
    </row>
  </rows>
</report>

这是我目前的 xsl:

<xsl:template match="/report">
  <html>
  <body>
    <h2>Report Sample</h2>
    <table border="1">
      <thead>
        <xsl:for-each select="columndefinition/column">
        <th><xsl:value-of select="headertext"/></th>
        </xsl:for-each>
      </thead>
      <tbody>
      <xsl:for-each select="rows/row">
      <tr>
        <xsl:for-each select="column">
        <td><xsl:value-of select="."/></td>
        </xsl:for-each>
      </tr>
      </xsl:for-each>
      </tbody>
    </table>
  </body>
  </html>
</xsl:template>

【问题讨论】:

    标签: html xml xslt


    【解决方案1】:
    ...
    <xsl:for-each select="column">
      <xsl:variable name="column-index" select="position()"/>
      <td class="{/report/columndefinition/column[$column-index]/cssclass}">
        <xsl:value-of select="."/>
      </td>
    </xsl:for-each>
    ...
    

    【讨论】:

      【解决方案2】:

      作为 Pavel 解决方案的替代方案,您可以使用 XSL 密钥:

      <xsl:key 
        name="kCssClass" 
        match="cssclass" 
        use="count(../preceding-sibling::column) + 1" 
      />
      
      <!-- later, in <column> context… -->
      <td class="{key('kCssClass', position())}">
      

      键将通过父节点&lt;column&gt; 位置索引&lt;cssclass&gt; 节点。对于大输入,这有机会运行得更快。

      【讨论】:

        猜你喜欢
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        相关资源
        最近更新 更多