我是XSLT初学者,我需要加粗或将任何样式应用于祖先元素。请在下面找到xml,xsl和所需的输出。
XML:
<group>
<elementgroup1>
<element1>value1</element1>
<element2/>
<element3>value3</element3>
</elementgroup1>
<elementgroup2>
<elementsubgroup2>
<element4>value4</element4>
<element5>value5</element5>
</elementsubgroup2>
</elementgroup2>
</group>
XSL:
<?xml version="1.0" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4.0" indent="yes"/>
<xsl:output method="html" version="4.0" indent="yes"/>
<xsl:template match="/">
<xsl:element name="table">
<xsl:attribute name="border">1</xsl:attribute>
<xsl:element name="tr">
<xsl:element name="th">
<xsl:text>Elements</xsl:text>
</xsl:element>
<xsl:element name="th">
<xsl:text>Values</xsl:text>
</xsl:element>
</xsl:element>
<xsl:apply-templates select="*"/>
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:element name="tr">
<xsl:element name="td">
<xsl:value-of select="name()"/>
</xsl:element>
<xsl:element name="td">
<xsl:value-of select="normalize-space(text())"/>
<xsl:if test="boolean(@styVal)">
<xsl:value-of select="@styVal"/>
</xsl:if>
</xsl:element>
</xsl:element>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
我要求的输出:
<table>
<tr>
<td style="font-weight:bold">group</td>
<td></td>
</tr>
<tr>
<td style="font-weight:bold">elementgroup1</td>
<td></td>
</tr>
<tr>
<td>element1</td>
<td>value1</td>
</tr>
<tr>
<td>element2</td>
<td></td>
</tr>
<tr>
<td>element3</td>
<td>value3</td>
</tr>
<tr>
<td style="font-weight:bold">elementgroup2</td>
<td></td>
</tr>
<tr>
<td style="font-weight:bold">elementsubgroup2</td>
<td></td>
</tr>
<tr>
<td>element4</td>
<td>value4</td>
</tr>
<tr>
<td>element5</td>
<td>value5</td>
</tr>
</table>
目前预计此 style =“font-weight:bold”,请建议您的观点。
答案 0 :(得分:1)
我相信这会返回您根据需要发布的结果。但也许你正在寻找其他东西,因为你的XSLT尝试显然正朝着另一个方向发展。
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<table>
<xsl:apply-templates select="*"/>
</table>
</xsl:template>
<xsl:template match="*[*]">
<tr>
<td style="font-weight:bold">
<xsl:value-of select="name()"/>
</td>
<td/>
</tr>
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="*">
<tr>
<td>
<xsl:value-of select="name()"/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
您可以直接在<td>
style='font-weight:bold'
中添加所需的样式,也可以使用xsl:use-attribute-sets="set_table"
和xsl:attribute-set
。