gpt4 book ai didi

xslt - xsl中的分页

转载 作者:行者123 更新时间:2023-12-02 22:31:04 25 4
gpt4 key购买 nike

我有一个 xml 文件和一个 xsl 文件,我为它编写了生成 html 的文件。我的 xml 文件是:

<?xml version="1.0" encoding="UTF-8"?>
<expert_questions>
<question Id="10">
<source_ip>192.168.150.1</source_ip>
<port>545</port>
<packet_size>1400</packet_size>
<more_details>
<time>13:42</time>
<count>100</count>
<comment>more details</comment>
</more_details>
</question>
<question Id="...">
.
.
.
</question>
</expert_questions>

和我的 xsl 文件:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:for-each select="expert_questions">
<table border="1" cellspacing="0" cellpadding="0">
<tr class ="table-title">
<th class="th">source ip</th>
<th class="th">port</th>
<th class="th">packet size</th>
<th class="th">more details</th>
</tr>
<xsl:for-each select="question">
<tr>
<xsl:attribute name="id">
<xsl:value-of select="@Id" />
</xsl:attribute>

<td><xsl:value-of select="source_ip"></xsl:value-of></td>
<td><xsl:value-of select="port"></xsl:value-of></td>
<td><xsl:value-of select="packet_size"></xsl:value-of></td>
<td>
<xsl:for-each select="more_details">
<xsl:attribute name="title">

<xsl:value-of select="concat('Time: ', time, '&#10;')" />
<xsl:value-of select="concat('Count: ', count)" />
<xsl:value-of select="concat('Comment: ', comment)" />
</xsl:attribute>
<xsl:text>more details</xsl:text>
</a>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

xml中的信息太长,应该在某些页面显示。

我需要使用分页。我搜索并 I find this page (关于 Xslt 分页示例)帮助我做到这一点。

它没有任何 xml 文件,我不能完全理解该怎么做(我是 xsl 的新手)。

我可以不使用 umbraco 吗?

最佳答案

我。这是一个小例子,展示了如何实现“分页”

给定这个源 XML 文档:

<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>

页面大小为 3 ,这个 XSLT 1.0 转换:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="num[position() mod 3 = 1]">
<page>
<xsl:apply-templates mode="inGroup"
select=".|following-sibling::num[not(position()>2)]"/>
</page>
</xsl:template>

<xsl:template match="num"/>

<xsl:template match="num" mode="inGroup">
<xsl:call-template name="identity"/>
</xsl:template>
</xsl:stylesheet>

产生:

<nums>
<page>
<num>01</num>
<num>02</num>
<num>03</num>
</page>
<page>
<num>04</num>
<num>05</num>
<num>06</num>
</page>
<page>
<num>07</num>
<num>08</num>
<num>09</num>
</page>
<page>
<num>10</num>
</page>
</nums>

请注意:

仅使用纯 XSLT 1.0 通过一次转换生成多个结果文档是不可能的。

您可以使用 XSLT 2.0 及其 xsl:result-document指令,或实现 EXSLT 的 <exsl:document> 的 XSLT 1.0 处理器扩展元素。另一种选择是为每个输出页面启动单独的 XSLT 1.0 转换。


二。使用 XSLT 2.0 进行分页

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:param name="pPageSize" select="3"/>

<xsl:template match="/*">
<xsl:for-each-group select="num" group-adjacent="position() idiv $pPageSize">
<xsl:result-document href="file:///c:/temp/delete/page{current-grouping-key()+1}">
<html>
<xsl:apply-templates mode="inGroup" select="current-group()"/>
</html>
</xsl:result-document>
</xsl:for-each-group>
</xsl:template>

<xsl:template match="num" mode="inGroup">
<p><xsl:value-of select="."/></p>
</xsl:template>
</xsl:stylesheet>

当此转换应用于同一 XML 文档时(上图)。它成功创建了四个结果文档

Saxon 8.7.01 发布了这个:

Saxon 9.1.0.7J from Saxonica

Java version 1.6.0_17

Stylesheet compilation time: 223 milliseconds

Processing file:/C:\CVS-DDN\fxsl-xslt2\data\numList.xml

Building tree for file:/C:\CVS-DDN\fxsl-xslt2\data\numList.xml using class net.sf.saxon.tinytree.TinyBuilder

Tree built in 2 milliseconds

Tree size: 23 nodes, 20 characters, 0 attributes

Loading net.sf.saxon.event.MessageEmitter

Writing to file:/c:/temp/delete/page1

Writing to file:/c:/temp/delete/page2

Writing to file:/c:/temp/delete/page3

Writing to file:/c:/temp/delete/page4

Execution time: 73 milliseconds

Memory used: 21482856

NamePool contents: 21 entries in 20 chains. 6 prefixes, 7 URIs

关于xslt - xsl中的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12235060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com