2011-02-28 60 views
2

我想分析一個SOAPUI項目文件並從文件生成一些文檔。我編寫了一個XSLT來分析項目(我的計劃是使用Msxsl運行預定作業,以自動爲我的煙霧測試生成最新的「文檔」)。Javascript中使用的內聯XSLT語法

問題>> 我的xml文件將包含多個項目,在這些項目中有測試用例列表。理想情況下,我想將這些測試用例包裝在可摺疊的div中,以便整個文檔更具可讀性。目前我的div正在創建,我試圖用Testsuite節點的位置給它一個唯一的名稱。

<?xml version="1.0" encoding="ISO-8859-1"?> 

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:con="http://eviware.com/soapui/config"> 
    <xsl:output method="html" encoding ="utf-8"/> 
    <xsl:template match="/"> 
     <html> 
     <head> 
      <script language="javascript"> 
      function toggleDiv(divid){ 
      if(document.getElementById(divid).style.display == 'none') 
       { 
       document.getElementById(divid).style.display = 'block'; 
       } 
      else 
       { 
       document.getElementById(divid).style.display = 'none'; 
       } 
      } 
      </script> 

      <style type="text/css"> 
      body {font-family:Arial,Helvetica; } 

      h1 {color:black; 
      font-size:0.975em; 

      } 

      h2.ex {color:black; 
      font-size:0.875em; 


      } 

      li.tc { 
      font-size:0.875em; 
      } 

      p.desc { 
      margin: 2%; 
      border: 1px dotted black; 
      font-size:0.775em; 
      line-height:90% 
      } 


      </style> 
     </head> 
     <body> 

      <xsl:apply-templates/> 

     </body> 
     </html> 
    </xsl:template> 

    <xsl:template match="con:soapui-project"> 
     <h1> 
     Project Name:<xsl:value-of select="@name"/> 
     </h1> 
     <br /> 
     <xsl:apply-templates/> 

    </xsl:template> 



    <xsl:template match="con:testSuite"> 
     <hr></hr> 

     <a href="javascript:;" onmousedown="toggleDiv('<xsl:value-of select="position()"/>');"> 
     <xsl:attribute name="onmousedown"><xsl:value-of select="position()"/></xsl:attribute> 
     <h2 class="ex"> 
      TestSuite:  <xsl:value-of select="@name"/> 
     </h2> 
     </a> 
     <br> 
     <p class="desc"> 
      Description: <xsl:value-of select="con:description"/> 

     </p> 
     </br> 

     <br /> 
     <div id="mydiv" style="display:none"> 
     <xsl:apply-templates /> 
     </div> 
    </xsl:template> 


    <xsl:template match="con:testCase"> 

     <ul> 
      <li class="tc"> 
      (#<xsl:value-of select="position()-3"/>) Testcase:  <xsl:value-of select="@name"/> 
      </li> 

      <xsl:if test="con:description=''"> 
      (RICHARD - PLEASE PROVIDE A DESCRIPTION!!) 
      </xsl:if> 

      <p class="desc"> 
      Description: <xsl:value-of select="con:description"/> 
      </p> 
     </ul> 
     <xsl:apply-templates /> 

    </xsl:template> 


    <xsl:template match="*"></xsl:template> 


    </xsl:stylesheet> 

當我嘗試將XSLT語法放入Javascript中時,此錯誤因爲驗證錯誤而失敗。我覺得我很接近,但通常的逃生方法並不適合我。

有人可以提供最後一塊嗎?

乾杯, - 理查德

+0

未成年人,但腳本的語言通常用'type =「text/javascript」'指定。嚴格地說它應該是'application/javascript',但是這不被某些瀏覽器支持。 – Flynn1179 2011-02-28 09:44:09

+0

好問題,+1。看到我的答案指出你的代碼有一個明顯的問題,並提供了標準的解決方案。 – 2011-02-28 13:55:36

回答

3

一個明顯的問題

<a href="javascript:;" 
    onmousedown="toggleDiv(<xsl:value-of select="position()"/>');"> 
<xsl:attribute name="onmousedown"> 
    <xsl:value-of select="position()"/> 
    </xsl:attribute> 

必須

<a href="javascript:;"/> 

    <xsl:attribute name="onmousedown"> 
    <xsl:value-of select="position()"/> 
    </xsl:attribute> 

這樣做的原因的問題是,標記(元素)是不允許的如在任何一個屬性的值格式良好的XML文檔。

+0

乾杯。這工作得很好。 – 2011-02-28 22:25:49

0

如何把你的JavaScript和CSS到外部的.js和.css文件,並使用相應的HTML標記中引用它們?

+0

就此解決方案而言,單個文件比多個文件運行得更好。這意味着支持一個過程,而不是我想用額外文件膨脹的東西。謝謝。 – 2011-02-28 22:28:12

1

用途:

<![CDATA[ 
    javascript code here 
]]> 

裏面的一切完全是由任何自我尊重的XML解析器忽略。