xslt - XSLT Multiple Input Values 有相同的标签,需要每行放置一个条件
问题描述
[问题]
我的输入值具有相同的标签名称,我需要在每行分隔或放置特定于条件的位置。例如,当<data>
以 5 开头时,需要输出父节点上的值,然后当后续值<data>
以 6 开头时,需要作为第一个数据的子节点输出。在下一条记录以 5 开头的第二个数据之后,它需要创建一个新<test>
标签。*注意:不应打印不以“5”或“6”开头的值。
我已经尝试了很多条件并没有解决这个问题。请告知最佳解决方案。谢谢!
当前语法执行数据如下:
<test/>
<test>
<data>51234</data>
<test1>
<data>61234</data>
</test1>
<test1>
<data>67890</data>
</test1>
</test>
<test>
<data>56789</data>
<test1>
<data>61234</data>
</test1>
<test1>
<data>67890</data>
</test1>
</test>
[当前语法]
<xsl:for-each select="test/data">
<test>
<xsl:if test="starts-with(., '5')">
<xsl:value-of select="."/>
</xsl:if>
<xsl:for-each select="../../test/data">
<xsl:if test="starts-with(., '6')">
<test1>
<xsl:value-of select="."/>
<test1>
</xsl:if>
<test>
</xsl:for-each>
</xsl:for-each>
[ 输入 ]
<test>
<data>11234</data>
</test>
<test>
<data>51234</data>
</test>
<test>
<data>61234</data>
</test>
<test>
<data>56789</data>
</test>
<test>
<data>67890</data>
</test>
[预期输出]
<test>
<data>51234</data>
<test1>
<data>61234</data>
</test1>
</test>
<test>
<data>56789</data>
<test1>
<data>67890</data>
</test1>
</test>
解决方案
尝试这样的事情:
<xsl:for-each-group select="test[matches(data, '^[56])]"
group-starting-with="data[matches(., '^5')]">
<test>
<data>
<xsl:copy-of select="current-group()[1]/data"/>
<xsl:for-each select="current-group()[position() gt 1]">
<test1>
<xsl:copy-of select="."/>
</test1>
</xsl:for-each>
</data>
</test>
</xsl:for-each-group>
这是 XSLT 2.0。1.0 解决方案要困难得多。
推荐阅读
- ios - 在 wifi 网络 iOS 中扫描连接的设备
- docusignapi - Docusign 标签值被错误地应用于其他标签
- javascript - 如何将序列化数组发送到 php 文档?
- c# - 从文件共享中读取图像路径并存储在表存储中 azure
- linux - ImageMagick 没有解码委托
- mysql - SQL 查询没有值
- telegram - 用电报机器人显示表格?
- sql - 如何在 SAP HANA 1.2v 中实现层次结构或递归 CTE
- c# - 并行发出多个请求时,HttpClient 花费过多的时间(除非 Http 版本设置为 1.0)
- python - 正则表达式:如何检查 Python 中是否有任何进程占用了 80% 或更多的 CPU