如何在XSLT中获取父节点和粗体(应用任何样式)?

时间:2015-04-23 10:16:21

标签: css xml xslt xpath

我是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”,请建议您的观点。

2 个答案:

答案 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