<?xml version="1.0" encoding="UTF-8"?>
<testInstanceResult>
<device>
<name>ritika-101</name>
<side>D</side>
</device>
<device>
<name>ritika-101</name>
<side>E</side>
</device>
</testInstanceResult>
这是xslt
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select ="testInstanceResult/device">
<xsl:if test ="contains(./name,'ritika-')">
<xsl:value-of select="./name"></xsl:value-of>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
期望的输出:ritika-101
我需要一次名称,即ritika-101并写入csv文件。让我知道,我在网上检查但感到困惑。我正在检查我的xsl中的每个设备,如果xpath包含ritika-101 den值的选择但是它的到来两次(ritika-101ritika-101)只需要ritika-101
答案 0 :(得分:0)
要在XSLT 1.0中执行此操作,您可以使用名为Muenchian Grouping的技术。基本上,你将获得每个组的第一个元素,这将是你的不同价值。
因此,您正在按device
对name
元素进行“分组”,因此您可以像这样定义一个键:
<xsl:key name="names" match="device" use="name" />
然后,要获得不同的值,您的for-each
应如下所示:
<xsl:for-each select="testInstanceResult/device[generate-id() = generate-id(key('names', name)[1])]">
您实际上也可以在for-each
的文字中添加测试,不过在这里使用starts-with
可能会更好。
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:key name="names" match="device" use="name" />
<xsl:template match="/">
<xsl:for-each select="testInstanceResult/device
[starts-with(name, 'ritika-')]
[generate-id() = generate-id(key('names', name)[1])]">
<xsl:value-of select="name" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>