请帮忙写xsl:
我有这个xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
<Table name = "My table1">
<Row isHeader="True">
<Cell val ="Header1"> </Cell>
<Cell val ="Header2"> </Cell>
<Cell val ="Header3"> </Cell>
</Row>
<Row isHeader="False">
<Cell val ="Data2.1"> </Cell>
<Cell val ="Data2.2"> </Cell>
<Cell val ="Data2.3"> </Cell>
</Row>
<Row>
<Cell val ="Data3.1"> </Cell>
<Cell val ="Data3.2"> </Cell>
<Cell val ="Data3.3"> </Cell>
</Row>
</Table>
</root>
到此输出:第一行包含标题。
<?xml version="1.0" encoding="utf-8"?>
<items>
<item>Header1=Data2.1 Header2=Data2.2 Header3=Data2.3 </item>
<item>Header1=Data3.1 Header2=Data3.2 Header3=Data3.3 </item>
</items>
非常感谢你的帮助!
答案 0 :(得分:1)
这是我的建议:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="Table">
<items>
<xsl:variable name="headers" select="Row[1]/Cell/@val"/>
<xsl:for-each select="Row[position() gt 1]">
<item>
<xsl:for-each select="Cell">
<xsl:if test="position() gt 1"><xsl:text> </xsl:text></xsl:if>
<xsl:variable name="pos" select="position()"/>
<xsl:value-of select="concat($headers[$pos], '=', @val)"/>
</xsl:for-each>
</item>
</xsl:for-each>
</items>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
<xsl:template match="Table">
<xsl:variable name='headers' select="Row[1]"/>
<xsl:for-each select="remove(Row, 1)">
<item><xsl:value-of
select="for $i in 1 to count($headers/Cell)
return concat($headers/Cell[$i], '=', Cell[$i])"/>
</item>
</xsl:for-each>
</xsl:template>
未经测试。