2013-09-25 19 views
1

我有一些XML格式的數據。爲例如通過樣式表變換的數據條?

<?xml version="1.0"?> 
<TableSizes> 
    <Table name="AuditLog" rows="13193925" reserved="4896864" data="2522592" indexSize="2373824" unused="448"/> 
    <Table name="Customers" rows="7021839" reserved="3243392" data="1480640" indexSize="1762640" unused="112"/> 
</TableSizes> 

我想這些數據被變換和由客戶端顯示。所以,當我提供用戶代理的XML,我提供了一個樣式表:

<?xml version="1.0"?> 
<?xml-stylesheet type='text/xsl' href='databaseSize.xslt' media='all'?> 
<TableSizes> 
    <Table name="AuditLog" rows="13193925" reserved="4896864" data="2522592" indexSize="2373824" unused="448"/> 
    <Table name="Customers" rows="7021839" reserved="3243392" data="1480640" indexSize="1762640" unused="112"/> 
</TableSizes> 

這導致它被轉換成一些合適的HTML。這工作得很好。

但現在我想補充數據條

因爲它是現在,我已經生成服務器上的HTML(即服務器決定如何顯示內容,而不是樣式表):

enter image description here

這就要求每個表格單元,以有一個自定義風格background施加,與所計算的梯度停止:

<TR> 
    <TD>AuditLog 
    <TD style="background: linear-gradient(to right, #658FC6 0%,rgb(255,255,255) 100%,rgb(255,255,255) 100%)">1319,,3925 
    <TD style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 100%,rgb(255,255,255) 100%)">489,,6864 
    <TD>252,,2592 
    <TD>237,,3824 
    <TD>448 
</TR> 
<TR> 
    <TD>Customers 
    <TD style="background: linear-gradient(to right, #658FC6 0%,rgb(255,255,255) 51%,rgb(255,255,255) 100%)">702,,1839 
    <TD style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 62%,rgb(255,255,255) 100%)">324,,3392 
    <TD>148,,0640 
    <TD>176,,2640 
    <TD>112 
</TR> 

很明顯,我寧願所有這些都在客戶端通過樣式表執行,而不是在服務器上執行。

可能嗎?

注意:如果不是這樣,那不是問題;只是這樣說。

到目前爲止,我所做的XSLT是什麼?

基本上沒有。該XST我迄今沒有采取任何措施添加數據吧:

<TD><xsl:value-of select="@name"/> 
<TD><xsl:value-of select="@rows"/> 
<TD><xsl:value-of select="@reserved"/> 
<TD><xsl:value-of select="@data"/> 
<TD><xsl:value-of select="@indexSize"/> 
<TD><xsl:value-of select="@unused"/> 

我有加的坡度繪製代碼的虛擬量:

<TD><xsl:value-of select="@name"/> 
<TD style='background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 50%,rgb(255,255,255) 100%)'><xsl:value-of select="@rows"/> 
<TD style='background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 50%,rgb(255,255,255) 100%)'><xsl:value-of select="@reserved"/> 
<TD><xsl:value-of select="@data"/> 
<TD><xsl:value-of select="@indexSize"/> 
<TD><xsl:value-of select="@unused"/> 

嚴格地說,我甚至不有XSLT。當我無法完成我想要的內容時,我不想編寫完整的XSLT。我有上面的XSLT,當有人提出這個問題不是工作回答時,我就會立即創建,直到我至少假裝先有一些XSLT。

回答

0

您可以在XSLT中輕鬆完成計算並將其放入樣式屬性中。

我爲每個AuditLogCustomers創建了一個模板。然後在Customers模板中,我剛剛爲AuditLog中的前一個值定義了一個變量用於計算。從那裏我用每個找出梯度所需的百分比(以及一些快速的「舍入」)。

<xsl:value-of select="substring(((@rows div $PrevRow) * 100),1,2)"/> 

所以,當你把你的XML以及與此XSL轉換它

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="Table[@name='AuditLog']"> 
    <tr> 
     <td> 
     <xsl:value-of select="@name"/> 
     </td> 
     <td style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 100%,rgb(255,255,255) 100%)"> 
     <xsl:value-of select="@rows"/> 
     </td> 
     <td style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 100%,rgb(255,255,255) 100%)"> 
     <xsl:value-of select="@reserved"/> 
     </td> 
     <td> 
     <xsl:value-of select="@data"/> 
     </td> 
     <td> 
     <xsl:value-of select="@indexSize"/> 
     </td> 
     <td> 
     <xsl:value-of select="@unused"/> 
     </td> 
    </tr> 
    </xsl:template> 

    <xsl:template match="Table[@name='Customers']"> 
    <xsl:variable name="PrevRow" select="preceding-sibling::Table/@rows"/> 
    <xsl:variable name="PrevReserved" select="preceding-sibling::Table/@reserved"/> 
    <tr> 
     <td> 
     <xsl:value-of select="@name"/> 
     </td> 
     <td> 
     <xsl:attribute name="style"> 
      <xsl:text>background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) </xsl:text> 
      <xsl:value-of select="substring(((@rows div $PrevRow) * 100),1,2)"/> 
      <xsl:text>%,rgb(255,255,255) 100%)</xsl:text> 
     </xsl:attribute> 
     <xsl:value-of select="@rows"/> 
     </td> 
     <td> 
     <xsl:attribute name="style"> 
      <xsl:text>background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) </xsl:text> 
      <xsl:value-of select="substring(((@reserved div $PrevReserved) * 100),1,2)"/> 
      <xsl:text>%,rgb(255,255,255) 100%)</xsl:text> 
     </xsl:attribute> 
     <xsl:value-of select="@reserved"/> 
     <br/> 
     <xsl:value-of select="$PrevReserved"/> 
     </td> 
     <td> 
     <xsl:value-of select="@data"/> 
     </td> 
     <td> 
     <xsl:value-of select="@indexSize"/> 
     </td> 
     <td> 
     <xsl:value-of select="@unused"/> 
     </td> 
    </tr> 
    </xsl:template> 

</xsl:stylesheet> 

你得到這樣的輸出:

<tr> 
    <td>AuditLog</td> 
    <td style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 100%,rgb(255,255,255) 100%)">13193925</td> 
    <td style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 100%,rgb(255,255,255) 100%)">4896864</td> 
    <td>2522592</td> 
    <td>2373824</td> 
    <td>448</td> 
</tr> 
<tr> 
    <td>Customers</td> 
    <td style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 53%,rgb(255,255,255) 100%)">7021839</td> 
    <td style="background: linear-gradient(to right, #FF595E 0%,rgb(255,255,255) 66%,rgb(255,255,255) 100%)">3243392<br/>4896864</td> 
    <td>1480640</td> 
    <td>1762640</td> 
    <td>112</td> 
</tr>