首次出现节点时xsl打印标题

时间:2012-03-30 20:17:26

标签: xslt printing header

我有一个简单的任务,我无法找到解决方案,而且我已经足够xsl了,我不知道怎么做。我有一个节点列表,在第一次出现节点时,我想打印一个标题。 E.g:

xml摘录

<data>
    <subdata1>value1.1</subdata1>
    <subdata2>value1.2</subdata2>
</data>
<data>
    <subdata1>value2.1</subdata1>
    <subdata2>value2.2</subdata2>
</data>
<data>
    <subdata1>value3.1</subdata1>
    <subdata2>value3.2</subdata2>
</data>

我希望输出类似于:

Subdata1    Subdata2
value1.1    value2.1
value2.1    value2.2
value3.1    value2.3

在第一个“数据”节点之前会有东西,所以我不认为我可以提前打印出来。我在想一个带有标志的if语句,它会在第一次找到数据时设置,但我的实现不起作用。关于如何做到这一点的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

此转化:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="data[1]">
  <xsl:text>subdata1&#9;subdata2</xsl:text>
  <xsl:apply-templates select="../data" mode="process"/>
 </xsl:template>

 <xsl:template match="data" mode="process">
  <xsl:value-of select="concat('&#xA;', subdata1, '&#9;',subdata2)"/>
 </xsl:template>

 <xsl:template match="data"/>
</xsl:stylesheet>

应用于以下XML文档(提供的XML片段,包装到单个顶部元素中以成为格式良好的XML文档):

<t>
    <data>
        <subdata1>value1.1</subdata1>
        <subdata2>value1.2</subdata2>
    </data>
    <data>
        <subdata1>value2.1</subdata1>
        <subdata2>value2.2</subdata2>
    </data>
    <data>
        <subdata1>value3.1</subdata1>
        <subdata2>value3.2</subdata2>
    </data>
</t>

生成想要的正确结果

subdata1    subdata2
value1.1    value1.2
value2.1    value2.2
value3.1    value3.2

解释:正确使用模板模式