如何在其他xsl文件中包含常见的xsl文件?

时间:2014-05-07 12:22:28

标签: javascript jquery xslt

我有几个xsl文件需要包含常见的xsl文件。因此,我不打算在每个文件中包含javascript文件,而是创建一个包含java脚本文件的Common.xsl,所有xsl文件都将包含它。
问题是如何做到这一点?

我尝试使用包含javascript文件的一些建议方法但没有成功,在浏览器控制台中我得到错误:
未捕获的ReferenceError:未定义jQuery
未捕获的ReferenceError:$未定义

看起来jquery不包括在内。
我试着做这样的事情:

  

<"脚本类型=" text / javascript" SRC =" common.js" />
  或

(function() {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = "../jquery/jquery-1.9.1.min.js";

    document.getElementsByTagName('head')[0].appendChild(script)
})();


编辑: 我回答了我的问题,请参阅下面的答案。

2 个答案:

答案 0 :(得分:0)

我使用xsl而不是javascript文件通过以下代码解决了我的问题:

我创建了一个包含所有常见javascript文件的Common.xsl文件。

Common.xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="Common">
    <link rel="stylesheet" href="SiteRef_getCSS?CSSName=Site/site.css" type="text/css"/>

    <script type="text/javascript" src="SiteRef_getJS?JSName=jquery/jquery-1.11.1.min.js"/>
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/common.js"/>
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/MessagesConstants.js"/>
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/win_functions.js"/>
    <script type="text/javascript" src="SiteRef_getJS?JSName=Site/resizeFunctions.js"/>
</xsl:template>



在需要这些包含的每个xsl文件上,我添加了以下行:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="common/Common.xsl"/> <!-- Here I include the Common.xsl -->
   <xsl:template match="/Reflection">
   <xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "SiteRef_getCSS?CSSName=Site/xhtml1-transitional.dtd"></xsl:text>
       <html>
           <head>
               <title><xsl:value-of select="Localization/ViewAbout"/></title>

               <xsl:call-template name="Common"/>  <!-- Here I apply the tamplate of the common includes -->

                  <body>
                    .
                    .
                    .
                  </body>
   </xsl:template>
</xsl:transform>



为了解析我的java应用服务器中的include URI(参见xsl:include ),我必须实现URIResolver resolve()函数:

public class XslURIResolver implements URIResolver
{
   private static final String XSL_PATH = System.getProperty("user.dir") + File.separatorChar + INetlayerConstants.c_UI_PATH + INetlayerConstants.c_XSL_PATH;

@Override
public Source resolve(String href, String base) throws TransformerException
{
    DOMSource xslDomSource;
    try
    {
        DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
        dFactory.setNamespaceAware(true);

        DocumentBuilder dBuilder = dFactory.newDocumentBuilder();

        InputStream in = new FileInputStream(XSL_PATH + href);
        InputSource xslInputSource = new InputSource(in);

        Document xslDoc = dBuilder.parse(xslInputSource);
        xslDomSource = new DOMSource(xslDoc);
        xslDomSource.setSystemId(XSL_PATH + href);
        return xslDomSource;
    }
    catch (ParserConfigurationException e)
    {
        e.printStackTrace();
    }
    catch (SAXException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

    return null;
}
}



然后在转换之前我设置了URIResolver:

TransformerFactory tFactory = TransformerFactory.newInstance();
tFactory.setURIResolver(new XslURIResolver());


这就是它,希望它可以帮助别人......

答案 1 :(得分:0)

  <xsl:element name="script">
      <xsl:attribute name="src">common.js</xsl:attribute>
        /* common code */
  </xsl:element>

应该做的伎俩