XML to HTML
An XML file normally contains data that we cannot use
directly. In the previous examples I mentioned the conversion of XML to csv
file. We can also convert the XML file to HTML file using HTML tags. Such a
file can be directly opened in a browser.
Problem:
We have an
XML file had the structure as defined in point – “Conditions for the output csv
file – ‘xsl:for-each’ tag”.
The below output was desired:
Earlier what we used to do was - get data in a csv file (as
described earlier), carry out certain Microsoft Excel operations on the data
and produce the above. Then take a screenshot and save it in SharePoint, from
where the file was viewed.
But, there is a way we can get this output, using only the
XML file and XML Starlet. Of course, one has to write XSL code to convert data
from XML file to convert it into HTML format.
Solution:
To tackle the problem, I had to create two intermediate XML
files. First one contained only the data that we needed. As we can see, the
output contains various test case execution status counts for various DCs. The
DCs’ value came from the datasource_description. Counts of statuses can be
taken by using ‘count’ function. Of course there were other conditions, e.g. ,
for Service Pack 1. The first code file can be seen below (it will be good if you can copy the below file in a XML editor for a better view)
<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes" method="xml"/> -<xsl:template match="/"> -<AllDCs><xsl:text> </xsl:text> -<xsl:for-each select=".//View/results/datasource"> -<DCDetails> <xsl:text> </xsl:text> -<DC> -<xsl:if test="datasource_description = 'Testlink CROM'"> <xsl:value-of select="'DC 1'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink common_services'"> <xsl:value-of select="'DC 5'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink bpd'"> <xsl:value-of select="'DC 8'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink spark'"> <xsl:value-of select="'DC 9'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink uc'"> <xsl:value-of select="'CCN'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink epma'"> <xsl:value-of select="'EPMA'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink life'"> <xsl:value-of select="'DC 2-3'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink Internet'"> <xsl:value-of select="'DC 10'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink ecc'"> <xsl:value-of select="'DC 7'"/> </xsl:if> -<xsl:if test="datasource_description = 'Testlink Customer_Experience_Management'"> <xsl:value-of select="'CEI'"/> </xsl:if></DC> <xsl:text> </xsl:text> -<TTLTCs> -<xsl:choose> -<xsl:when test="datasource_description = 'Testlink CROM'"> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))] and testplan_custom[(testplan_custom_name='tp_sub_phase' and (testplan_custom_value='LUSV' or testplan_custom_value='Purchase' or testplan_custom_value='Quote' or testplan_custom_value='Application' or testplan_custom_value='App' or testplan_custom_value='Other ICP'))] and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))]]//testcase_id)"/> </xsl:when> -<xsl:otherwise> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))] and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))]]//testcase_id)"/> </xsl:otherwise> </xsl:choose> </TTLTCs> <xsl:text> </xsl:text> -<TTLBTCs> -<xsl:choose> -<xsl:when test="datasource_description = 'Testlink CROM'"> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))] and testplan_custom[(testplan_custom_name='tp_sub_phase' and (testplan_custom_value='LUSV' or testplan_custom_value='Purchase' or testplan_custom_value='Quote' or testplan_custom_value='Application' or testplan_custom_value='App' or testplan_custom_value='Other ICP'))] and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))]]//tcexecution_status[.='b'])"/> </xsl:when> -<xsl:otherwise> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))] and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))]]//tcexecution_status[.='b'])"/> </xsl:otherwise> </xsl:choose> </TTLBTCs> <xsl:text> </xsl:text> -<TTLPTCs> -<xsl:choose> -<xsl:when test="datasource_description = 'Testlink CROM'"> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))] and testplan_custom[(testplan_custom_name='tp_sub_phase' and (testplan_custom_value='LUSV' or testplan_custom_value='Purchase' or testplan_custom_value='Quote' or testplan_custom_value='Application' or testplan_custom_value='App' or testplan_custom_value='Other ICP'))] and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))]]//tcexecution_status[.='p'])"/> </xsl:when> -<xsl:otherwise> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))] and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))]]//tcexecution_status[.='p'])"/> </xsl:otherwise> </xsl:choose> </TTLPTCs> <xsl:text> </xsl:text> -<TTLFTCs> -<xsl:choose> -<xsl:when test="datasource_description = 'Testlink CROM'"> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))] and testplan_custom[(testplan_custom_name='tp_sub_phase' and (testplan_custom_value='LUSV' or testplan_custom_value='Purchase' or testplan_custom_value='Quote' or testplan_custom_value='Application' or testplan_custom_value='App' or testplan_custom_value='Other ICP'))] and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))]]//tcexecution_status[.='f'])"/> </xsl:when> -<xsl:otherwise> <xsl:value-of select="count(./repository/testplan[testplan_active='1' and testplan_custom[(testplan_custom_name='tp_phase' and (testplan_custom_value='ICP_Ph0.001.001.000_ServicePack'))] and testplan_custom[(testplan_custom_name='tp_test_type' and (testplan_custom_value='DC System' or testplan_custom_value='Non-functional Test' or testplan_custom_value='User Acceptance Test'))]]//tcexecution_status[.='f'])"/> </xsl:otherwise> </xsl:choose> </TTLFTCs> <xsl:text> </xsl:text> </DCDetails> <xsl:text> </xsl:text> </xsl:for-each> </AllDCs> </xsl:template>
<!--<xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="//repository"/> <xsl:template match="*/text()[normalize-space()]"> <xsl:value-of select="normalize-space()"/> </xsl:template> <xsl:template match="*/text()[not(normalize-space())]" />-->
</xsl:stylesheet>
Notice in this file the output method:
<xsl:output method="xml"
indent="yes"/>
Because we are creating an intermediate XML file only
containing the data that we require.
The output XML file is attached below:
<AllDCs>
<DCDetails>
<DC>DC 8</DC>
<TTLTCs>34</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>33</TTLPTCs>
<TTLFTCs>1</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>DC 1</DC>
<TTLTCs>11</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>11</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC/>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>DC 5</DC>
<TTLTCs>39</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>39</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC/>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC/>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC/>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>DC 9</DC>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>CCN</DC>
<TTLTCs>11</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>11</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>DC 10</DC>
<TTLTCs>1388</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>1371</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC/>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC/>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>DC 2-3</DC>
<TTLTCs>2472</TTLTCs>
<TTLBTCs>27</TTLBTCs>
<TTLPTCs>2336</TTLPTCs>
<TTLFTCs>71</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>DC 7</DC>
<TTLTCs>29</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>27</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC/>
<TTLTCs>0</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>0</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
<DCDetails>
<DC>EPMA</DC>
<TTLTCs>80</TTLTCs>
<TTLBTCs>0</TTLBTCs>
<TTLPTCs>80</TTLPTCs>
<TTLFTCs>0</TTLFTCs>
</DCDetails>
Notice that the data that present in this file is DC wise. ‘DC8’
is the first DC in the original XML file; hence its record is the first record
in the above XML file, followed by ‘DC1’. The final output is NOT DC wise; it
is the Test Execution Status wise (top to bottom). Hence, we needed data in
some new format so that the ‘statuses’ come down vertically and ‘DCs’ can go
horizontally. A fresh code was required
that can arrange the data in new XML file where records were ‘status’ wise. See
it here ( (it will be good if you can copy the below file in a XML editor for a better view)):
<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes" method="xml"/> -<xsl:template match="/"> -<records> <script type="text/javascript">(((getDate() + 44)*100*59.52)/4167);</script> <xsl:text> </xsl:text> -<record> <value>TTLTCs</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="./TTLTCs"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="./TTLTCs"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="./TTLTCs"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="./TTLTCs"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="./TTLTCs"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="./TTLTCs"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="./TTLTCs"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="./TTLTCs"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="./TTLTCs"/></EPMA> </xsl:if> <xsl:text> </xsl:text> -<OverallTTL><xsl:value-of select="sum(../DCDetails/TTLTCs)"/></OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> -<record> <value>TTLNRTCs</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="./TTLTCs - (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)"/></EPMA> </xsl:if> <xsl:text> </xsl:text> -<OverallTTL><xsl:value-of select="sum(../DCDetails/TTLTCs) - (sum(../DCDetails/TTLPTCs) + sum(../DCDetails/TTLFTCs) + sum(../DCDetails/TTLBTCs))"/></OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> -<record> <value>TTLBTCs</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="./TTLBTCs"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="./TTLBTCs"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="./TTLBTCs"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="./TTLBTCs"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="./TTLBTCs"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="./TTLBTCs"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="./TTLBTCs"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="./TTLBTCs"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="./TTLBTCs"/></EPMA> </xsl:if> <xsl:text> </xsl:text> -<OverallTTL><xsl:value-of select="sum(../DCDetails/TTLBTCs)"/></OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> -<record> <value>TTLFTCs</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="./TTLFTCs"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="./TTLFTCs"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="./TTLFTCs"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="./TTLFTCs"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="./TTLFTCs"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="./TTLFTCs"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="./TTLFTCs"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="./TTLFTCs"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="./TTLFTCs"/></EPMA> </xsl:if> <xsl:text> </xsl:text> -<OverallTTL><xsl:value-of select="sum(../DCDetails/TTLFTCs)"/></OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> -<record> <value>TTLPTCs</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="./TTLPTCs"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="./TTLPTCs"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="./TTLPTCs"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="./TTLPTCs"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="./TTLPTCs"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="./TTLPTCs"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="./TTLPTCs"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="./TTLPTCs"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="./TTLPTCs"/></EPMA> </xsl:if> <xsl:text> </xsl:text> -<OverallTTL><xsl:value-of select="sum(../DCDetails/TTLPTCs)"/></OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> -<record> <value>TTLPRTCs</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="format-number((./TTLPTCs div (./TTLPTCs + ./TTLFTCs + ./TTLBTCs)), '###.#%')"/></EPMA> </xsl:if> <xsl:text> </xsl:text> -<OverallTTL><xsl:value-of select="format-number((sum(../DCDetails/TTLPTCs) div (sum(../DCDetails/TTLPTCs) + sum(../DCDetails/TTLFTCs) + sum(../DCDetails/TTLBTCs))), '###.#%')"/></OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> -<record> <value>TTLPlan</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="'--'"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="'--'"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="'--'"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="'--'"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="'--'"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="'--'"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="'--'"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="'--'"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="'--'"/></EPMA> </xsl:if> <xsl:text> </xsl:text> <OverallTTL> </OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> -<record> <value>TTLOETCs</value> <xsl:text> </xsl:text> -<xsl:for-each select=".//DCDetails"> -<xsl:if test="DC='DC 1'"> -<DC1><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></DC1> </xsl:if> -<xsl:if test="DC='DC 2-3'"> -<DC2-3><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></DC2-3> </xsl:if> -<xsl:if test="DC='DC 5'"> -<DC5><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></DC5> </xsl:if> -<xsl:if test="DC='DC 7'"> -<DC7><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></DC7> </xsl:if> -<xsl:if test="DC='DC 8'"> -<DC8><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></DC8> </xsl:if> -<xsl:if test="DC='DC 10'"> -<DC10><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></DC10> </xsl:if> -<xsl:if test="DC='CCN'"> -<CCN><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></CCN> </xsl:if> -<xsl:if test="DC='CEI'"> -<CEI><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></CEI> </xsl:if> -<xsl:if test="DC='EPMA'"> -<EPMA><xsl:value-of select="format-number(((./TTLPTCs + ./TTLFTCs) div ./TTLTCs), '###.#%')"/></EPMA> </xsl:if> <xsl:text> </xsl:text> -<OverallTTL><xsl:value-of select="format-number(((sum(../DCDetails/TTLPTCs) + sum(../DCDetails/TTLFTCs)) div sum(../DCDetails/TTLTCs)), '###.#%')"/></OverallTTL> <xsl:text> </xsl:text> </xsl:for-each> </record> <xsl:text> </xsl:text> </records> </xsl:template> -<xsl:template match="@*|node()"> -<xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="//repository"/> -<xsl:template match="*/text()[normalize-space()]"> <xsl:value-of select="normalize-space()"/> </xsl:template> <xsl:template match="*/text()[not(normalize-space())]"/> </xsl:stylesheet>
The output XML looked like following:
<records><script type="text/javascript">(((getDate() + 44)*100*59.52)/4167);</script>
<record><value>TTLTCs</value>
<DC8>34</DC8>
<OverallTTL>4070</OverallTTL>
<DC1>11</DC1>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<DC5>39</DC5>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<CCN>11</CCN>
<OverallTTL>4070</OverallTTL>
<DC10>1388</DC10>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<DC2-3>2472</DC2-3>
<OverallTTL>4070</OverallTTL>
<DC7>29</DC7>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
<EPMA>80</EPMA>
<OverallTTL>4070</OverallTTL>
<CEI>6</CEI>
<OverallTTL>4070</OverallTTL>
<OverallTTL>4070</OverallTTL>
</record>
<record><value>TTLNRTCs</value>
<DC8>0</DC8>
<OverallTTL>57</OverallTTL>
<DC1>0</DC1>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<DC5>0</DC5>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<CCN>0</CCN>
<OverallTTL>57</OverallTTL>
<DC10>17</DC10>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<DC2-3>38</DC2-3>
<OverallTTL>57</OverallTTL>
<DC7>2</DC7>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
<EPMA>0</EPMA>
<OverallTTL>57</OverallTTL>
<CEI>0</CEI>
<OverallTTL>57</OverallTTL>
<OverallTTL>57</OverallTTL>
</record>
<record><value>TTLBTCs</value>
<DC8>0</DC8>
<OverallTTL>27</OverallTTL>
<DC1>0</DC1>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<DC5>0</DC5>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<CCN>0</CCN>
<OverallTTL>27</OverallTTL>
<DC10>0</DC10>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<DC2-3>27</DC2-3>
<OverallTTL>27</OverallTTL>
<DC7>0</DC7>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
<EPMA>0</EPMA>
<OverallTTL>27</OverallTTL>
<CEI>0</CEI>
<OverallTTL>27</OverallTTL>
<OverallTTL>27</OverallTTL>
</record>
<record><value>TTLFTCs</value>
<DC8>1</DC8>
<OverallTTL>72</OverallTTL>
<DC1>0</DC1>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<DC5>0</DC5>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<CCN>0</CCN>
<OverallTTL>72</OverallTTL>
<DC10>0</DC10>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<DC2-3>71</DC2-3>
<OverallTTL>72</OverallTTL>
<DC7>0</DC7>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
<EPMA>0</EPMA>
<OverallTTL>72</OverallTTL>
<CEI>0</CEI>
<OverallTTL>72</OverallTTL>
<OverallTTL>72</OverallTTL>
</record>
<record><value>TTLPTCs</value>
<DC8>33</DC8>
<OverallTTL>3914</OverallTTL>
<DC1>11</DC1>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<DC5>39</DC5>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<CCN>11</CCN>
<OverallTTL>3914</OverallTTL>
<DC10>1371</DC10>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<DC2-3>2336</DC2-3>
<OverallTTL>3914</OverallTTL>
<DC7>27</DC7>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
<EPMA>80</EPMA>
<OverallTTL>3914</OverallTTL>
<CEI>6</CEI>
<OverallTTL>3914</OverallTTL>
<OverallTTL>3914</OverallTTL>
</record>
<record><value>TTLPRTCs</value>
<DC8>97.1%</DC8>
<OverallTTL>97.5%</OverallTTL>
<DC1>100%</DC1>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<DC5>100%</DC5>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<CCN>100%</CCN>
<OverallTTL>97.5%</OverallTTL>
<DC10>100%</DC10>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<DC2-3>96%</DC2-3>
<OverallTTL>97.5%</OverallTTL>
<DC7>100%</DC7>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
<EPMA>100%</EPMA>
<OverallTTL>97.5%</OverallTTL>
<CEI>100%</CEI>
<OverallTTL>97.5%</OverallTTL>
<OverallTTL>97.5%</OverallTTL>
</record>
<record><value>TTLPlan</value>
<DC8>--</DC8>
<OverallTTL/>
<DC1>--</DC1>
<OverallTTL/>
<OverallTTL/>
<DC5>--</DC5>
<OverallTTL/>
<OverallTTL/>
<OverallTTL/>
<OverallTTL/>
<OverallTTL/>
<CCN>--</CCN>
<OverallTTL/>
<DC10>--</DC10>
<OverallTTL/>
<OverallTTL/>
<OverallTTL/>
<DC2-3>--</DC2-3>
<OverallTTL/>
<DC7>--</DC7>
<OverallTTL/>
<OverallTTL/>
<EPMA>--</EPMA>
<OverallTTL/>
<CEI>--</CEI>
<OverallTTL/>
<OverallTTL/>
</record>
<record><value>TTLOETCs</value>
<DC8>100%</DC8>
<OverallTTL>97.9%</OverallTTL>
<DC1>100%</DC1>
<OverallTTL>97.9%</OverallTTL>
<OverallTTL>97.9%</OverallTTL>
<DC5>100%</DC5>
<OverallTTL>97.9%</OverallTTL>
<OverallTTL>97.9%</OverallTTL>
<OverallTTL>97.9%</OverallTTL>
<OverallTTL>97.9%</OverallTTL>
<OverallTTL>97.9%</OverallTTL>
<CCN>100%</CCN>
<OverallTTL>97.9%</OverallTTL>
<DC10>98.8%</DC10>
<OverallTTL>97.9%</OverallTTL>
<OverallTTL>97.9%</OverallTTL>
<OverallTTL>97.9%</OverallTTL>
<DC2-3>97.4%</DC2-3>
<OverallTTL>97.9%</OverallTTL>
<DC7>93.1%</DC7>
<OverallTTL>97.9%</OverallTTL>
Notice the ‘value’ tag. It is contained with
<records><record> tag. The total number of ‘record’ tags is the
total number of rows required in the final output. So we have 7 <record>
tags. The ‘Overall Planned %’ was a manual entry. Each record has a
<value> tag - TTLTCs (Total Test Cases in a DC), TTLBTCs (Total Blocked
Test Cases in a DC), TTLNRTCs (Total Not Run Test Cases in a DC), TTLPTCs
(Total passed Test Cases in a DC), TTLFTCs (Total failed Test Cases in a DC),
TTLPTCs (Pass Rate of Test Cases in a DC), and TTLOETCs (Overall Execution Rate
in a DC). Within each record we have data for each DC denoted by the DC tag.
Now was the turn to write a code that can convert above XML
data into displayable HTML file. The code is below:
<?xml version="1.0" encoding="ISO-8859-1"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html"/> -<xsl:template match="/"> -<html> -<body> -<table border="5" cellspacing="5" cellpadding="5" font="Verdana" align="center"> -<tr>-<td bgcolor="#ffff99"> -<table border="3" cellspacing="1" cellpadding="1" font="Verdana" align="center" bgcolor="#6633ff"> -<div style="color:#6633ff"> <H1 align="center" bgcolor="#aaaaaa">Phase 0 System Test Central</H1> <H2 align="center">Service Pack Progress Summary</H2></div> </table> <H3 align="center">Test Execution Progress</H3> -<H4 align="center">(Updated with the data as of <script type="text/javascript"> var d = new Date(); var curr_date = d.getDate(); var curr_month = d.getMonth() + 1; //Months are zero based var curr_year = d.getFullYear(); document.write(curr_month + "/" + curr_date + "/" + curr_year); </script> 4:00 AM CST)</H4> -<table border="1" cellspacing="1" cellpadding="1" font="Verdana" align="center" style="" overflow="hidden"> -<tr bgcolor="#CCEEFF"> -<div style="color:#CCE0FF"> -<td align="center" bgcolor="#FFFFFF">-<div style="width:170px">-<font size="5">-<b><xsl:value-of select="'Service Pack 1'"/></b></font></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'DC 1'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'DC 2-3'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'DC 5'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'DC 7'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'DC 8'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'DC 10'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'CCN'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'CEI'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'EPMA'"/></div></td> -<td align="center">-<div style="width:50px"><xsl:value-of select="'Overall'"/></div></td> </div> -<xsl:for-each select="//record"> -<tr bgcolor="#ccff00"> -<xsl:if test="./value = 'TTLTCs'"> -<td align="center" bgcolor="#A9A9A9"><b>Total Test Case #</b></td> </xsl:if> -<xsl:if test="./value = 'TTLNRTCs'"> -<td align="center" bgcolor="#D4D4D4"><b>(Not Executed) Not Run</b></td> </xsl:if> -<xsl:if test="./value = 'TTLBTCs'"> -<td align="center" bgcolor="#B0C4DE"><b>(Not Executed) Blocked #</b></td> </xsl:if> -<xsl:if test="./value = 'TTLFTCs'"> -<td align="center" bgcolor="#FF0000">-<b><font color="white">(Executed) Failed #</font></b></td> </xsl:if> -<xsl:if test="./value = 'TTLPTCs'"> -<td align="center" bgcolor="#32CD32"><b>(Executed) Passed #</b></td> </xsl:if> -<xsl:if test="./value = 'TTLPRTCs'"> -<td align="center" bgcolor="#C0C080"><b>Pass Rate %</b></td> </xsl:if> -<xsl:if test="./value = 'TTLPlan'"> -<td align="center" bgcolor="#C0C0C0"><b>Overall Planned %</b></td> </xsl:if> -<xsl:if test="./value = 'TTLOETCs'"> -<td align="center" bgcolor="#D0DFFA"><b>Overall Execution %</b></td> </xsl:if> -<xsl:choose> -<xsl:when test="./value = 'TTLTCs'"> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./DC1"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./DC2-3"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./DC5"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./DC7"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./DC8"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./DC10"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./CCN"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./CEI"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./EPMA"/></td> -<td align="center" bgcolor="#CBCBCB"><xsl:value-of select="./OverallTTL"/></td> </xsl:when> -<xsl:otherwise> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./DC1"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./DC2-3"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./DC5"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./DC7"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./DC8"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./DC10"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./CCN"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./CEI"/></td> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./EPMA"/></td> -<xsl:choose> -<xsl:when test="position() = last() - 1"> -<td align="center" bgcolor="#E0E0E0"> <script type="text/javascript"> var d = new Date(); var curr_date = d.getDate(); var currd = ((((Number(curr_date))+44)*59.53*100/4167)); document.write(currd.toFixed(1) + '%'); </script> </td> </xsl:when> -<xsl:otherwise> -<td align="center" bgcolor="#DDDDDD"><xsl:value-of select="./OverallTTL"/></td> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> <xsl:text> </xsl:text> </tr> </xsl:for-each> </tr> </table> </td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
As one can
imagine, the following tag was inevitable:
<xsl:output
method="html"/>
The final
output looked as following:
It looked
pretty close to what we desired in the beginning. The corresponding HTML file
is below:
<html><body><table align="center" font="Verdana" cellpadding="5" cellspacing="5" border="5"><tr><td bgcolor="#ffff99"> | |
<table bgcolor="#6633ff" align="center" font="Verdana" cellpadding="1" cellspacing="1" border="3"><div style="color:#6633ff"> | |
<H1 align="center" bgcolor="#aaaaaa">Phase 0 System Test Central</H1> | |
<H2 align="center">Service Pack Progress Summary</H2> | |
</div></table> | |
<H3 align="center">Test Execution Progress</H3> | |
<H4 align="center">(Updated with the data as of <script type="text/javascript"> | |
var d = new Date(); | |
var curr_date = d.getDate(); | |
var curr_month = d.getMonth() + 1; //Months are zero based | |
var curr_year = d.getFullYear(); | |
document.write(curr_month + "/" + curr_date + "/" + curr_year); | |
</script> 4:00 AM CST)</H4> | |
<table align="center" font="Verdana" cellpadding="1" cellspacing="1" border="1" style="" overflow="hidden"><tr bgcolor="#CCEEFF"> | |
<div style="color:#CCE0FF"> | |
<td align="center" bgcolor="#FFFFFF"><div style="width:170px"><font size="5"><b>Service Pack 1</b></font></div></td> | |
<td align="center"><div style="width:50px">DC 1</div></td> | |
<td align="center"><div style="width:50px">DC 2-3</div></td> | |
<td align="center"><div style="width:50px">DC 5</div></td> | |
<td align="center"><div style="width:50px">DC 7</div></td> | |
<td align="center"><div style="width:50px">DC 8</div></td> | |
<td align="center"><div style="width:50px">DC 10</div></td> | |
<td align="center"><div style="width:50px">CCN</div></td> | |
<td align="center"><div style="width:50px">CEI</div></td> | |
<td align="center"><div style="width:50px">EPMA</div></td> | |
<td align="center"><div style="width:50px">Overall</div></td> | |
</div> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#A9A9A9" align="center"><b>Total Test Case #</b></td> | |
<td bgcolor="#CBCBCB" align="center">11</td> | |
<td bgcolor="#CBCBCB" align="center">2472</td> | |
<td bgcolor="#CBCBCB" align="center">39</td> | |
<td bgcolor="#CBCBCB" align="center">29</td> | |
<td bgcolor="#CBCBCB" align="center">34</td> | |
<td bgcolor="#CBCBCB" align="center">1388</td> | |
<td bgcolor="#CBCBCB" align="center">11</td> | |
<td bgcolor="#CBCBCB" align="center">6</td> | |
<td bgcolor="#CBCBCB" align="center">80</td> | |
<td bgcolor="#CBCBCB" align="center">4070</td> | |
</tr> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#D4D4D4" align="center"><b>(Not Executed) Not Run</b></td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">38</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">2</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">17</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">57</td> | |
</tr> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#B0C4DE" align="center"><b>(Not Executed) Blocked #</b></td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">27</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">27</td> | |
</tr> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#FF0000" align="center"><b><font color="white">(Executed) Failed #</font></b></td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">71</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">1</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">0</td> | |
<td bgcolor="#DDDDDD" align="center">72</td> | |
</tr> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#32CD32" align="center"><b>(Executed) Passed #</b></td> | |
<td bgcolor="#DDDDDD" align="center">11</td> | |
<td bgcolor="#DDDDDD" align="center">2336</td> | |
<td bgcolor="#DDDDDD" align="center">39</td> | |
<td bgcolor="#DDDDDD" align="center">27</td> | |
<td bgcolor="#DDDDDD" align="center">33</td> | |
<td bgcolor="#DDDDDD" align="center">1371</td> | |
<td bgcolor="#DDDDDD" align="center">11</td> | |
<td bgcolor="#DDDDDD" align="center">6</td> | |
<td bgcolor="#DDDDDD" align="center">80</td> | |
<td bgcolor="#DDDDDD" align="center">3914</td> | |
</tr> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#C0C080" align="center"><b>Pass Rate %</b></td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">96%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">97.1%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">97.5%</td> | |
</tr> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#C0C0C0" align="center"><b>Overall Planned %</b></td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#DDDDDD" align="center">--</td> | |
<td bgcolor="#E0E0E0" align="center"><script type="text/javascript"> | |
var d = new Date(); | |
var curr_date = d.getDate(); | |
var currd = ((((Number(curr_date))+44)*59.53*100/4167)); | |
document.write(currd.toFixed(1) + '%'); | |
</script></td> | |
</tr> | |
<tr bgcolor="#ccff00"> | |
<td bgcolor="#D0DFFA" align="center"><b>Overall Execution %</b></td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">97.4%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">93.1%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">98.8%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">100%</td> | |
<td bgcolor="#DDDDDD" align="center">97.9%</td> | |
</tr> | |
</tr></table> | |
</td></tr></table></body></html> | |
Problems
faced:
One can imagine that it won’t have been easy to create the
above output. It wasn’t. Lot of brainstorming was required to create the output
as we see above. Possibly we can do everything in a single code. One problem
that really baffled me was how to get ‘Overall’ numbers. Even though it looks
very obvious to add all the displayed values in 3rd code, but what
about percentages? In the first run they came to 822% when I added all of them.
That was definitely unacceptable. So, I had to carry out changes in 2nd
code. Notice the presence of <OverallTTL> tag within each record tag of dcnumbersint2xml.xml
file. It is unnecessarily repeated for each record several times. That was the
only way I could have solved the problem. The color codes for HTML were taken
from here.
No comments:
Post a Comment