2017-07-27 99 views
0

我有下面的XML,我試着將它轉換成XSL,然後使用Java,將其轉換爲HTML,因此,該報告是用戶友好,易於閱讀。我做錯了我的xsl轉換 - 當我生成的HTML,它只包含標題。轉換XML到XSL,然後到HTML

編輯:輸出im期待是一個結果表。結果的表格格式。 例如: 測試套件:命名 時間取:0.0 故障:3

測試用例名:TEST2 製出:FOO酒吧

THIS IS MY XML:

<?xml version="1.0" encoding="UTF-8"?> 
<testsuites disabled="0" errors="0" failures="0" name="HealthCheck" tests="3" time="0.0"><testsuite tests="3" disabled="0" errors="0" failures="0" time="19.167" id="0" name="Scenario"><testcase classname="Test" name="test-0000001" time="0.441"><system-out>Overall status:SUCCESSFUL 
</system-out><system-err></system-err></testcase><testcase classname="sheep" name="Check Responses-0000002" time="18.11"><system-out> 
Overall status:SUCCESSFUL 
</system-out><system-err></system-err></testcase><testcase classname="dog" name="cat-0000003" time="0.032"><system-out> 
Overall status:SUCCESSFUL 
</system-out><system-err></system-err></testcase></testsuite></testsuites> 

這是我的XSL:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/*"> 
<html> 
<head><title>Real's HowTo</title></head> 
<body> 
<table border="1"> 
<tr> 
<th>disabled</th> 
<th>errors</th> 
<th>failures</th> 
<th>name</th> 
<th>tests</th> 
<th>time</th> 
</tr> 
<xsl:for-each select="*"> 
<tr> 
<td><xsl:value-of select="testsuites[@disabled='disabled']"/></td> 
<td><xsl:value-of select="testsuites[@errors='errors']"/></td> 
<td><xsl:value-of select="testsuites[@failures='failures']"/></td> 
<td><xsl:value-of select="testsuites[@name='name']"/></td> 
<td><xsl:value-of select="testsuites[@tests='tests']"/></td> 
<td><xsl:value-of select="testsuites[@time='time']"/></td> 
</tr> 
</xsl:for-each> 
</table> 
</body></html> 
</xsl:template> 
</xsl:stylesheet> 

可選的Java代碼:

public static void main(String[] args) { 
    try { 

    TransformerFactory tFactory = TransformerFactory.newInstance(); 

    Transformer transformer = 
     tFactory.newTransformer 
     (new javax.xml.transform.stream.StreamSource 
      ("howto.xsl")); 

    transformer.transform 
     (new javax.xml.transform.stream.StreamSource 
      ("howto.xml"), 
     new javax.xml.transform.stream.StreamResult 
      (new FileOutputStream("howto.html"))); 
    } 
    catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 
} 

我在HTML輸出只顯示標題。而不是行值。 林不知道如果我去這個正確的方式 - 我在這裏粘貼的XML,我想轉換成HTML報告看起來不錯,易於閱讀。

任何幫助,將不勝感激。

+0

您能編輯您的問題以包含您期望從輸入中獲得的輸出嗎?謝謝! –

+0

編輯,謝謝。 – JavaPotter

回答

0

澄清一點:您並未將XML轉換爲XSL。您正在將XML轉換爲HTML,使用 XSL來指定轉換。

我想,你希望每個<testsuite>元素的錶行(雖然有一個在XML只有一個這樣的元素您提供)。

的問題是這些行:

<td><xsl:value-of select="testsuites[@disabled='disabled']"/></td> 
<td><xsl:value-of select="testsuites[@errors='errors']"/></td> 
<td><xsl:value-of select="testsuites[@failures='failures']"/></td> 
<td><xsl:value-of select="testsuites[@name='name']"/></td> 
<td><xsl:value-of select="testsuites[@tests='tests']"/></td> 
<td><xsl:value-of select="testsuites[@time='time']"/></td> 

首先,沒有<testsuites>元件,其是一個<testsuite>元素的子元素。其次,[@disabled='disabled']手段「僅適用於具有disabled="disabled"屬性的<測試包>元素返回文本。」

我敢肯定,你想要的是測試包(未測試包)的值屬性本身,所以你不應該用[@disabled='disabled']等表達式對屬性進行布爾測試。相反,請選擇屬性節點:

<td><xsl:value-of select="@disabled"/></td> 
<td><xsl:value-of select="@errors"/></td> 
<td><xsl:value-of select="@failures"/></td> 
<td><xsl:value-of select="@name"/></td> 
<td><xsl:value-of select="@tests"/></td> 
<td><xsl:value-of select="@time"/></td> 
+0

非常感謝,它的工作:) – JavaPotter