xslt - 使用带有流的 XSLT 转换文档后计数元素
问题描述
为了完成上一个问题中的任务,我还需要计算完成转换后获得的文档的某些元素。
通常,在处理小文档时,可以将初始输出放入一个变量,然后对其应用模板,例如
<xsl:template match=/*>
<xsl:variable name="phase1">
<Transformed>
...
</Transformed>
</xsl:variable>
<xsl:apply-templates mode="step2" select="$phase1/*"/>
</xsl:template>
<xsl:template match="node() | @*" mode="step2">
<xsl:copy>
<xsl:apply-templates select="node() | @*" mode="step2"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Transformed/DocumentTotal/text()" mode="step2">
<xsl:value-of select="count(/Transformed//*[some predicate here]"/>
</xsl:template>
但是我必须能够处理大型文档,所以我既不想将结果复制到变量中,也不想以非流模式处理它。我看了看,<xsl:accumulator
已经写了一个允许我计算源文档中的某些元素,但是现在我卡住了,不知道如何对结果文档中的元素进行这样的计数,有人可以帮我吗?
解决方案
有很多技术可以做到这一点,但没有一个特别令人满意。他们包括:
(a) 在输出文档上运行另一遍: (a1) 在同一个 XSLT 样式表中,使用第二个 XSLT 样式表 (a3) 中的变量 (a2),使用 XSLT 以外的一些技术,例如后处理 SAX 过滤器
(b) 对输入文档运行一些计算,计算出结果中将出现多少项目,而与实际产生这些结果无关。当然,这些的可行性根据实际情况有很大差异。
(c) 使用一些处理器扩展,允许您增加计数器作为生成输出项的副作用(例如 saxon:assign - 这是保留该指令的主要用例)。
推荐阅读
- ios - 重用单元格时触发 UITableView
- java - 使用带有 ajax 请求的表单调用 Servelt (FIlter)(必须使用授权标头)
- latex - 有谁知道乳胶中小于或大于 \lessgtr 的符号代码
- reporting-services - 如何为报表中动态创建的矩阵中的列添加标题?
- php - 从特定用户获取列 INT 值
- android - 我需要使用所有drawable、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi和drawable-xxxhdpi吗?
- android - 如何在 ArCore 中获取跟踪状态
- mysql - 从两个表中获取mysql数据
- oracle - LDAP:空的binddn“”和身份验证类型从无变得简单
- c# - 使用 DispatcherTimer 显示随机数