xml - 如何使用 XSLT 2.0 在 XML 文档中查找第一个表
问题描述
我想在 xml 文档中找到第一个表。我在下面提到了例子。
输入
<doc>
<first>
<table-cover>
<table>
<thead>Table1</thead>
<tbody>Table1</tbody>
</table>
</table-cover>
</first>
<first>
<second>
<table-cover>
<table>
<thead>Table2</thead>
<tbody>Table2</tbody>
</table>
</table-cover>
</second>
</first>
<first>
<table-cover>
<table>
<thead>Table3</thead>
<tbody>Table3</tbody>
</table>
</table-cover>
</first>
</doc>
我想为<first-table>
文档中的第一个表添加特殊元素
试过的模板:
<xsl:template match="table-cover">
<xsl:choose>
<xsl:when test="table/position() eq 1">
<!-- code -->
</xsl:when>
<xsl:otherwise>
<!-- code -->
</xsl:otherwise>
<xsl:choose>
</xsl:template>
但是当我使用上面的模板时,所有表都被选中并为所有表应用条件。我只想申请<xsl:when test="table/position() eq 1">
第一张桌子。
如何通过更改来解决此问题<xsl:when test="??????">
我正在使用XSLT 2.0
. 谢谢
解决方案
您可以测试 a 是否table
是文档中的第一个表
test="empty(table/preceding::table)"
我将在这里使用两个模板规则,而不是 xsl:choose。
如果文档很大,那么测试每个表以查看是否有任何更早的表是低效的。更快的方法是将全局变量绑定到第一个表:
<xsl:variable name="first-table" select="(//table)[1]"/>
然后针对此变量测试后续表:
<xsl:template match="table[. is $first-table]">...
推荐阅读
- jmeter - JMeter - 版本 5.1 中没有响应标头,而版本 3.1 工作正常
- networking - 在 Solaris 9 SPARC OS [QEMU] 中配置 NIC 设备
- ios - 在 NSMapTable 中迭代键会永远保留弱值
- github - 为什么我的 shell 管道不能在我的服务器上使用私有运行器运行?为什么我会收到此错误消息?
- c# - 从站点 c# 获取 html
- entity - 软删除应该在领域层建模吗?
- hbase - HBase 连接是否应该保持活动状态?
- python - 如何处理依赖于另一个变量的变量,例如 Gurobi python 界面中的需求和价格
- python - ValueError:int() 的无效文字,基数为 10:'fee_code'
- npm - Npm 缺少脚本:dev