xml - 使用 XSLT 2.0 计算不同标签内的标签
问题描述
我有一个如下所示的 XML 文件:
<tier_list>
<tier>
<status_list>
<status>
<b_list>
<b>test1</b>
<b>test2</b>
</b_list>
</status>
<status>
<b_list>
<b>test3</b>
<b>test4</b>
</b_list>
</status>
<status_list>
<tier>
<tier>
<status_list>
<status>
<b_list>
<b>testest</b>
</b_list>
</status>
<status>
<b_list>
<b>abc</b>
</b_list>
</status>
<status_list>
<tier>
</tier_list>
我使用 XSLT 2.0 将此文件转换为 csv 文件。有没有办法生成一个数字,计算层标签内的每个 b 标签(忽略状态标签)?
所以我会得到这样的结果:
1;test1
2;test2
3;test3
4;test4
1;testtest
2;abc
解决方案
恕我直言,最简单的解决方案是嵌套两条xsl:for-each
指令,以便每次重新开始计数tier
。然后使用该position()
函数在内部提供编号xsl:for-each
:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="tier_list">
<xsl:for-each select="tier">
<xsl:for-each select="status_list/status/b_list/b">
<xsl:value-of select="position()"/>
<xsl:text>;</xsl:text>
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
或者,您可以使用xsl:number
:
<xsl:number level="any" from="tier" format="1;"/>
演示(使用您输入的更正(!)版本):https ://xsltfiddle.liberty-development.net/bFWRApq
推荐阅读
- file - 如何在不修改名称的情况下使用 ls 列出文件
- html - Angular:如何使用打字稿变量控制 Select 元素的“Size”属性?
- postgresql - Postgres jsonb:查询多级
- java - 防止 JUnit 测试卡在 while 循环中
- javascript - Sequelize ORM,获取具有附加条件的关联项目的计数
- javascript - 如何用正则表达式匹配一系列字符来替换它们?
- r - 识别 R 数据框中最后一次出现的值的列名
- python - Python EMA 方差随着时间的推移而最小化......大约 3xSpan
- excel - 如果来自两个不同列的两个单元格匹配,则返回某个值
- mysql - 在 MySQL 上检索记录的效率问题