将一个节点序列渲染为内部节点序列的M x N表

伯特

我试图将一个节点序列呈现为M x N表,并根据这里已经问到的另一个问题来管理它。

现在,我尝试将子序列呈现为内部M x N表。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item id="1">
        <subitem>1.1</subitem>
        <subitem>1.2</subitem>
        <subitem>1.3</subitem>
        <subitem>1.4</subitem>
    </item>
    <item id="2">
        <subitem>2.1</subitem>
        <subitem>2.2</subitem>
        <subitem>2.3</subitem>
        <subitem>2.4</subitem>
        <subitem>2.5</subitem>
    </item>
    <item id="3">
        <subitem>3.1</subitem>
        <subitem>3.2</subitem>
        <subitem>3.3</subitem>
        <subitem>3.4</subitem>
    </item>
    <item id="4">
        <subitem>4.1</subitem>
        <subitem>4.2</subitem>
        <subitem>4.3</subitem>
    </item>
</root>

以及相应的XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>

    <xsl:key name="items-by-row" match="root/item"
             use="floor(count(preceding-sibling::item) div 2) + 1"/>

    <xsl:key name="subitems-by-row" match="root/item/subitem"
             use="floor(count(preceding-sibling::subitem) div 2) + 1"/>

    <xsl:template match="subitem" mode="cell">
            <subitem>
                <xsl:value-of select="current()" />
            </subitem>
    </xsl:template>

    <xsl:template match="subitem" mode="row">
        <subitem-row>
            <xsl:apply-templates select="key('subitems-by-row', position())" mode="cell"/>
            <xsl:variable name="span" select="2 - count(key('subitems-by-row', position()))"/>
        </subitem-row>
    </xsl:template>

    <xsl:template match="item" mode="cell">
        <td>
            <item>
                <xsl:value-of select="current()/@id" />
            </item>
            <xsl:apply-templates select="./subitem[position() mod 2 = 1]" mode="row"/>            
        </td>
    </xsl:template>

    <xsl:template match="item" mode="row">
        <tr>
            <xsl:apply-templates select="key('items-by-row', position())" mode="cell"/>
            <xsl:variable name="span" select="2 - count(key('items-by-row', position()))"/>
        </tr>
    </xsl:template>

    <xsl:template match="/">
        <html>
            <body>
                <table>
                    <xsl:apply-templates select="//item[position() mod 2 = 1]" mode="row"/>
                </table>
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>

导致以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<html>
    <body>
        <table>
            <tr>
                <td>
                    <item>1</item>
                    <subitem-row>
                        <subitem>1.1</subitem>
                        <subitem>1.2</subitem>
                        <subitem>2.1</subitem>
                        <subitem>2.2</subitem>
                        <subitem>3.1</subitem>
                        <subitem>3.2</subitem>
                        <subitem>4.1</subitem>
                        <subitem>4.2</subitem>
                    </subitem-row>
                    <subitem-row>
                        <subitem>1.3</subitem>
                        <subitem>1.4</subitem>
                        <subitem>2.3</subitem>
                        <subitem>2.4</subitem>
                        <subitem>3.3</subitem>
                        <subitem>3.4</subitem>
                        <subitem>4.3</subitem>
                    </subitem-row>
                </td>
                <td>
                    <item>2</item>
                    <subitem-row>
                        <subitem>1.1</subitem>
                        <subitem>1.2</subitem>
                        <subitem>2.1</subitem>
                        <subitem>2.2</subitem>
                        <subitem>3.1</subitem>
                        <subitem>3.2</subitem>
                        <subitem>4.1</subitem>
                        <subitem>4.2</subitem>
                    </subitem-row>
                    <subitem-row>
                        <subitem>1.3</subitem>
                        <subitem>1.4</subitem>
                        <subitem>2.3</subitem>
                        <subitem>2.4</subitem>
                        <subitem>3.3</subitem>
                        <subitem>3.4</subitem>
                        <subitem>4.3</subitem>
                    </subitem-row>
                    <subitem-row>
                        <subitem>2.5</subitem>
                    </subitem-row>
                </td>
            </tr>
            <tr>
                <td>
                    <item>3</item>
                    <subitem-row>
                        <subitem>1.1</subitem>
                        <subitem>1.2</subitem>
                        <subitem>2.1</subitem>
                        <subitem>2.2</subitem>
                        <subitem>3.1</subitem>
                        <subitem>3.2</subitem>
                        <subitem>4.1</subitem>
                        <subitem>4.2</subitem>
                    </subitem-row>
                    <subitem-row>
                        <subitem>1.3</subitem>
                        <subitem>1.4</subitem>
                        <subitem>2.3</subitem>
                        <subitem>2.4</subitem>
                        <subitem>3.3</subitem>
                        <subitem>3.4</subitem>
                        <subitem>4.3</subitem>
                    </subitem-row>
                </td>
                <td>
                    <item>4</item>
                    <subitem-row>
                        <subitem>1.1</subitem>
                        <subitem>1.2</subitem>
                        <subitem>2.1</subitem>
                        <subitem>2.2</subitem>
                        <subitem>3.1</subitem>
                        <subitem>3.2</subitem>
                        <subitem>4.1</subitem>
                        <subitem>4.2</subitem>
                    </subitem-row>
                    <subitem-row>
                        <subitem>1.3</subitem>
                        <subitem>1.4</subitem>
                        <subitem>2.3</subitem>
                        <subitem>2.4</subitem>
                        <subitem>3.3</subitem>
                        <subitem>3.4</subitem>
                        <subitem>4.3</subitem>
                    </subitem-row>
                </td>
            </tr>
        </table>
    </body>
</html>

我如何才能仅获取相应项目的子项目?

brgds,伯特

hr_117

只需对subitem模板进行少量更改即可尝试:

<xsl:template match="subitem" mode="row">
    <xsl:variable name="item" select=".." />
    <subitem-row>
        <xsl:apply-templates 
              select="key('subitems-by-row', position())[../@id = $item/@id]" mode="cell"/>
        <xsl:variable name="span" select="2 - count(key('subitems-by-row', position()))"/>
    </subitem-row>
</xsl:template

具有以下(希望如此)输出:

<html>
  <body>
    <table>
      <tr>
        <td>
          <item>1</item>
          <subitem-row>
            <subitem>1.1</subitem>
            <subitem>1.2</subitem>
          </subitem-row>
          <subitem-row>
            <subitem>1.3</subitem>
            <subitem>1.4</subitem>
          </subitem-row>
        </td>
        <td>
          <item>2</item>
          <subitem-row>
            <subitem>2.1</subitem>
            <subitem>2.2</subitem>
          </subitem-row>
          <subitem-row>
            <subitem>2.3</subitem>
            <subitem>2.4</subitem>
          </subitem-row>
          <subitem-row>
            <subitem>2.5</subitem>
          </subitem-row>
        </td>
      </tr>
      <tr>
        <td>
          <item>3</item>
          <subitem-row>
            <subitem>3.1</subitem>
            <subitem>3.2</subitem>
          </subitem-row>
          <subitem-row>
            <subitem>3.3</subitem>
            <subitem>3.4</subitem>
          </subitem-row>
        </td>
        <td>
          <item>4</item>
          <subitem-row>
            <subitem>4.1</subitem>
            <subitem>4.2</subitem>
          </subitem-row>
          <subitem-row>
            <subitem>4.3</subitem>
          </subitem-row>
        </td>
      </tr>
    </table>
  </body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

给定一个长度为N的整数排序列表,确定元素x是否在列表中

来自分类Dev

在根节点中寻找x节点的第n个实例

来自分类Dev

在根节点中寻找x节点的第n个实例

来自分类Dev

SQL Server将XML解析为表-具有相同名称的多个节点,第一个节点应为表列

来自分类Dev

n x n 表生成器只打印一行?

来自分类Dev

网络X移除一个边缘的节点

来自分类Dev

rxjs一个序列多个订阅需要x

来自分类Dev

转到节点N的XML解组属性X

来自分类Dev

Oracle-从双中选择常数值作为M x N表

来自分类Dev

在随机图中:一个节点链接到列表x定义的特殊节点上的任何节点的概率是多少?

来自分类Dev

哪种算法找出一个节点到另一个X类型节点的最短路径

来自分类Dev

将序列保存在特殊表中还是获取最后一个值?

来自分类Dev

在R中找到长度为n的第一个序列

来自分类Dev

在一个序列中找到相加为n的m个数字

来自分类Dev

Python:如何生成一个序列,每m个数字跳过n个数字

来自分类Dev

JS /节点:一个函数,它接受一个数字N并返回一个值为[0,1,... N-1]的数组

来自分类Dev

XSLT 从同一个父节点中的子节点生成表

来自分类Dev

我可以通过编程将一个数据序列向下移动到一个较低的x轴吗?

来自分类Dev

获取Xdocument对象中的X个第一个节点

来自分类Dev

表的overflow-x内部字段集

来自分类Dev

表的overflow-x内部字段集

来自分类Dev

Python:将一个列表中的值匹配到另一列表中的值序列

来自分类Dev

难以在一个Excel工作表中合并2 x Private Sub Worksheet_Change(ByVal目标为范围)

来自分类Dev

将一系列逗号分隔的数字按顺序折叠为 Beginning-End vs n,n,n,n,x,x,x,x,

来自分类Dev

如何使一个表与postgresql中的另一个表共享一个序列?

来自分类Dev

如何按时间序列将一个数据表中的条目与另一个数据表进行匹配?

来自分类Dev

如何按时间序列将一个数据表中的条目与另一个数据表进行匹配?

来自分类Dev

MySQL显示表的记录数为x

来自分类Dev

类型“ X”未映射为表

Related 相关文章

  1. 1

    给定一个长度为N的整数排序列表,确定元素x是否在列表中

  2. 2

    在根节点中寻找x节点的第n个实例

  3. 3

    在根节点中寻找x节点的第n个实例

  4. 4

    SQL Server将XML解析为表-具有相同名称的多个节点,第一个节点应为表列

  5. 5

    n x n 表生成器只打印一行?

  6. 6

    网络X移除一个边缘的节点

  7. 7

    rxjs一个序列多个订阅需要x

  8. 8

    转到节点N的XML解组属性X

  9. 9

    Oracle-从双中选择常数值作为M x N表

  10. 10

    在随机图中:一个节点链接到列表x定义的特殊节点上的任何节点的概率是多少?

  11. 11

    哪种算法找出一个节点到另一个X类型节点的最短路径

  12. 12

    将序列保存在特殊表中还是获取最后一个值?

  13. 13

    在R中找到长度为n的第一个序列

  14. 14

    在一个序列中找到相加为n的m个数字

  15. 15

    Python:如何生成一个序列,每m个数字跳过n个数字

  16. 16

    JS /节点:一个函数,它接受一个数字N并返回一个值为[0,1,... N-1]的数组

  17. 17

    XSLT 从同一个父节点中的子节点生成表

  18. 18

    我可以通过编程将一个数据序列向下移动到一个较低的x轴吗?

  19. 19

    获取Xdocument对象中的X个第一个节点

  20. 20

    表的overflow-x内部字段集

  21. 21

    表的overflow-x内部字段集

  22. 22

    Python:将一个列表中的值匹配到另一列表中的值序列

  23. 23

    难以在一个Excel工作表中合并2 x Private Sub Worksheet_Change(ByVal目标为范围)

  24. 24

    将一系列逗号分隔的数字按顺序折叠为 Beginning-End vs n,n,n,n,x,x,x,x,

  25. 25

    如何使一个表与postgresql中的另一个表共享一个序列?

  26. 26

    如何按时间序列将一个数据表中的条目与另一个数据表进行匹配?

  27. 27

    如何按时间序列将一个数据表中的条目与另一个数据表进行匹配?

  28. 28

    MySQL显示表的记录数为x

  29. 29

    类型“ X”未映射为表

热门标签

归档