RTF模板编码,XSLT编码

时间:2011-01-01 03:21:11

标签: templates xslt rtf

我有以下要求

<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代码来做同样的事情。提前致谢。

2 个答案:

答案 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',.),'&#xA;')"/>
    </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', .), '&#10;')"/>
  </xsl:template>

</xsl:stylesheet>

因此,对于您的样本,输出为

Index: 1; match: red
Index: 2; match: Yellow
Index: 3; match: black
Index: 4; match: Violet