【问题标题】:XSL for Xml to table transformationXSL 用于 Xml 到表的转换
【发布时间】:2012-10-30 00:18:19
【问题描述】:

跟进我昨天提出的 xslt 问题,链接如下。

first last element 2nd variation

我必须将每个部分的第一页和最后一页的页码输出到一个表格中。

我不知道从哪里开始。 XSLT 1.0 解决方案和 XSLT 2.0 解决方案将不胜感激。我非常感谢任何给定的帮助。

问候 JJ。

输入:

<root>
  <page number="1" section="Arsenal">Arsenal</page> 
  <page number="2" section="Arsenal">Arsenal</page> 
  <page number="3" section="Arsenal">Arsenal</page> 
  <page number="4" section="Arsenal">Arsenal</page> 
  <page number="5" section="Arsenal">Arsenal</page> 
  <page number="6" section="Arsenal">Arsenal</page> 
  <page number="7" section="Chelsea">Chelsea</page> 
  <page number="8" section="Chelsea">Chelsea</page> 
  <page number="9" section="Chelsea">Chelsea</page> 
  <page number="10" section="Chelsea">Chelsea</page> 
  <page number="11" section="Chelsea">Chelsea</page> 
  <page number="12" section="Chelsea">Chelsea</page> 
  <page number="13" section="ManUnited">ManUnited</page> 
  <page number="14" section="ManUnited">ManUnited</page> 
  <page number="15" section="ManUnited">ManUnited</page> 
  <page number="16" section="ManUnited">ManUnited</page> 
  <page number="17" section="ManUnited">ManUnited</page> 
  <page number="18" section="ManUnited">ManUnited</page> 
  <page number="19" section="ManCity">ManCity</page> 
  <page number="20" section="ManCity">ManCity</page> 
  <page number="21" section="ManCity">ManCity</page> 
  <page number="22" section="ManCity">ManCity</page> 
  <page number="23" section="ManCity">ManCity</page> 
  <page number="24" section="ManCity">ManCity</page> 
 </root>

输出:

<tr><td>1</td><td>Arsenal</td><td>6</td></tr>
<tr><td>7</td><td>Chelsea</td><td>12</td></tr>
<tr><td>13</td><td>ManU</td><td>18</td></tr>
<tr><td>19</td><td>Mancity</td><td>24</td></tr>

【问题讨论】:

    标签: html xml xslt xpath


    【解决方案1】:

    用途:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
    
      <xsl:key name="k" match="page" use="@section"/>
    
      <xsl:template match="/root">
        <table>
          <xsl:apply-templates select="page[generate-id() = generate-id(key('k', @section))]"/>
        </table>
      </xsl:template>
    
      <xsl:template match="page">
        <tr>
          <td>
            <xsl:value-of select="@number"/>
          </td>
          <td>
            <xsl:value-of select="."/>
          </td>
          <td>
            <xsl:value-of select="key('k', @section)[last()]/@number"/>
          </td>
        </tr>
      </xsl:template>
    </xsl:stylesheet>
    

    输出:

    <table>
      <tr>
        <td>1</td>
        <td>Arsenal</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>Chelsea</td>
        <td>12</td>
      </tr>
      <tr>
        <td>13</td>
        <td>ManUnited</td>
        <td>18</td>
      </tr>
      <tr>
        <td>19</td>
        <td>ManCity</td>
        <td>24</td>
      </tr>
    </table>
    

    【讨论】:

    • 再次感谢 Kirill Polishchuk。你的才华很受赞赏。问候 JJ。
    • @jay.james.666,不客气。不要忘记投票并接受有用的答案。
    • XSLT 2.0 的答案会有什么不同?
    • @jay.james.666,当前解决方案使用 Muenchian 分组。看看这个答案:stackoverflow.com/a/13115180/787016。很容易修改它以获得所需的结果。
    • 我的解决方案似乎不适用于 XSLT 2.0。我要发布另一个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 2016-04-15
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2014-06-09
    相关资源
    最近更新 更多