Javascript中使用的内联XSLT语法

时间:2011-02-28 05:31:57

标签: javascript xml xslt

我想解析一个SOAPUI Project文件并从该文件生成一些文档。我编写了一个XSLT来解析项目(我的计划是使用Msxsl运行预定作业,为我的冒烟测试自动生成最新的“文档”)。

问题>>  我的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时,由于验证错误,当前失败了。我觉得我很接近,但通常的逃生方法对我不起作用。

有人可以提供最后一块吗?

干杯, - 理查德

3 个答案:

答案 0 :(得分: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文档中的属性值。

答案 1 :(得分:1)

使用:

<![CDATA[
  javascript code here
]]>

任何自尊的XML解析器都会完全忽略其中的所有内容。

答案 2 :(得分:0)

如何将JavaScript和CSS放入外部.js和.css文件并使用适当的HTML标记来引用它们?