2015-03-13 45 views
0

我正在尝试使用XSLT和css实现xml文件的树视图。 我有嵌套的孩子在XML中,我遍历他们来显示每个条目的内容。如何在XSLT上动态设置保证金

每个孩子都是一个带有消息条目的记录器。我希望每个子表根据祖先计数缩进,我得到正确。然而试图动态设置表格边距margin-left =“$ margin * 10”不起作用。

这是我的XSLT/XML

<xsl:template match="operationLogger"> 
 
    <xsl:variable name="margin" select="count(ancestor::*) * 10"/> 
 
     <table class="normalTable" cols="4"> 
 
     <xsl:attribute name="margin-left"> 
 
      <xsl:value-of select="$margin"/> 
 
     </xsl:attribute> 
 
     <tr class="errorsCollectionTitle"> 
 
      <td colspan="4"> 
 
      <xsl:value-of select="@name"/> 
 
      </td> 
 
     </tr> 
 
     <xsl:if test="operationLogEntry"> 
 
      <xsl:apply-templates select="operationLogEntry"/> 
 
     </xsl:if> 
 
     <xsl:if test="operationLogger"> 
 
      <xsl:apply-templates select="operationLogger"/> 
 
     </xsl:if> 
 
     </table> 
 
    </xsl:template> 
 

 
    <xsl:template match="operationLogEntry"> 
 
    <tr> 
 
     <xsl:attribute name="class"> 
 
     <xsl:choose> 
 
      <xsl:when test="position() mod 2 = 1">rowData</xsl:when> 
 
      <xsl:otherwise>rowAlternatingData</xsl:otherwise> 
 
     </xsl:choose> 
 
     </xsl:attribute> 
 
     <td> 
 
     <xsl:attribute name="class"> 
 
      <xsl:choose> 
 
      <xsl:when test="@level = 'Error'">errorImage</xsl:when> 
 
      <xsl:when test="@level = 'Warning'">warningImage</xsl:when> 
 
      <xsl:when test="@level = 'Info'">informationImage</xsl:when> 
 
      <xsl:when test="@level = 'Debug'">informationImage</xsl:when> 
 
      </xsl:choose> 
 
     </xsl:attribute> 
 
     </td> 
 
     <td class="timeStamp"> 
 
     <xsl:value-of select="@timeStamp"/> 
 
     </td> 
 
     <td class="source"> 
 
     <xsl:value-of select="../loggerSource/@computer" /> 
 
     /
 
     <xsl:value-of select="../loggerSource/@user" /> 
 
     </td> 
 
     <td class="message"> 
 
      <div> 
 
     <xsl:attribute name="class"> 
 
      <xsl:choose> 
 
       <xsl:when test="@level = 'Error'">errorColor</xsl:when> 
 
       <xsl:when test="@level = 'Warning'">warningColor</xsl:when> 
 
       <xsl:when test="@level = 'Info'">informationColor</xsl:when> 
 
       <xsl:when test="@level = 'Debug'">informationColor</xsl:when> 
 
      </xsl:choose> 
 
      </xsl:attribute> 
 
      <xsl:value-of select="@message"/> 
 
     </div> 
 
     </td> 
 
    </tr> 
 
    </xsl:template>
<operationLogger name=""> 
 
     <loggerSource domain="user" computer="computer" user="account" /> 
 
     <operationLogEntry timeStamp="2015/02/16 07:15:21" level="Info" message="Adding 1 to transactions list" /> 
 
     <operationLogEntry timeStamp="2015/02/16 07:15:21" level="Info" message="Executing 1 transactions..." /> 
 
     <operationLogEntry timeStamp="2015/02/16 07:15:22" level="Info" message="Executed 1 transactions successfully!" /> 
 
     <operationLogger name="TransactionOperationCollection.Execute()"> 
 
     <loggerSource domain="user" computer="computer" user="account" /> 
 
     <operationLogEntry timeStamp="2015/02/16 07:15:21" level="Info" message="Commiting transaction 0:Transaction" /> 
 
     <operationLogEntry timeStamp="2015/02/16 07:15:22" level="Info" message="Committed transaction 0:Transaction" /> 
 
     <operationLogger name="TransactionOperation.Commit()"> 
 
     <operationLogEntry timeStamp="2015/02/16 07:15:22" level="Info" message="Setting Auditonly" /> 
 
      <operationLogEntry timeStamp="2015/02/16 07:15:22" level="Info" message="Succesfully changed Audit Only" /> 
 
     </operationLogger> 
 
     </operationLogger> 
 
    </operationLogger>

,我试图从1到循环 '的祖先号' 和增加跨度或股利。我尝试推送第一行的内容。没有什么似乎为我工作。

任何帮助将不胜感激!

回答

2

有没有这样的事情作为margin-left属性。您可以使用style属性对于这一点,虽然:

<xsl:attribute name="style"> 
    <xsl:value-of select="concat('margin-left: ', $margin, 'px;')"/> 
</xsl:attribute> 

但是,使用内嵌样式很少是一件好事。我建议你把你的表放在ul/li层次结构中。通过这种方式,你可以把利润率在你的CSS文件,而/ <style>部分不是动态计算它们:

<xsl:template match="/"> 
    <ul> 
    <xsl:apply-templates /> 
    </ul> 
</xsl:template>  

<xsl:template match="operationLogger"> 
    <li> 
    <table class="normalTable" cols="4"> 
     <tr class="errorsCollectionTitle"> 
     <td colspan="4"> 
      <xsl:value-of select="@name"/> 
     </td> 
     </tr> 
     <xsl:apply-templates select="operationLogEntry"/> 
    </table> 
    <xsl:if test="operationLogger"> 
     <ul> 
     <xsl:apply-templates select="operationLogger"/> 
     </ul> 
    </xsl:if> 
    </li> 
</xsl:template> 
+0

非常感谢!我不敢相信我浪费了太多的时间来使用内联属性而不是使用样式!你是救世主! – Roussul 2015-03-16 12:37:15