我有以下要求
<data>
<dataset1>
<number>1</number>
<name>red</name>
<number>2</number>
<name>Yellow</name>
<number>3</number>
<name>black</name>
<number>4</number>
<name>Violet</name>
</dataset1>
<dataset2>
<index>1</index>
<index>2</index>
<index>3</index>
<index>4</index>
</dataset2>
</data>
我需要遍历数据集2获取索引值,将其与dataset1中的数字标记值进行比较。如果匹配发生,则显示相应名称标签的值。我需要以rtf格式获得输出。请提供BI标签或相关的xslt代码来做同样的事情。提前致谢。
答案 0 :(得分:2)
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="kNameByNumber"
match="name"
use="preceding-sibling::number[1]"/>
<xsl:template match="text()"/>
<xsl:template match="index[key('kNameByNumber',.)]">
<xsl:value-of select="concat(.,' : ',key('kNameByNumber',.),'
')"/>
</xsl:template>
</xsl:stylesheet>
输出:
1 : red
2 : Yellow
3 : black
4 : Violet
答案 1 :(得分:0)
我不熟悉RTF格式,因此我无法帮助输出该格式,但下面是一个XSLT 1.0样式表,它处理dataset2/index
元素并输出任何匹配的“dataset1 / name”:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:key name="k1" match="dataset1/name" use="preceding-sibling::number[1]"/>
<xsl:template match="/">
<xsl:apply-templates select="data/dataset2/index"/>
</xsl:template>
<xsl:template match="dataset2/index">
<xsl:value-of select="concat('Index: ', .,
'; match: ', key('k1', .), ' ')"/>
</xsl:template>
</xsl:stylesheet>
因此,对于您的样本,输出为
Index: 1; match: red
Index: 2; match: Yellow
Index: 3; match: black
Index: 4; match: Violet