我有一个简单的任务,我无法找到解决方案,而且我已经足够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语句,它会在第一次找到数据时设置,但我的实现不起作用。关于如何做到这一点的任何想法?
谢谢!
答案 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	subdata2</xsl:text>
<xsl:apply-templates select="../data" mode="process"/>
</xsl:template>
<xsl:template match="data" mode="process">
<xsl:value-of select="concat('
', subdata1, '	',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
解释:正确使用模板和模式。