Xsl:include from classpath

We are using the XML SDK for Java. We've being trying to use the <xsl:include> tag to include stylesheets with header and footer templates into other stylesheets.
I get the following error when I try to parse the stylesheet with my xml at run time on the server using the XMLProcessor class:
XSL-1002: Error while processing include XSL file (no protocol: /common.xsl)
The only way we can get the <xsl:include> to work is to use the fully qualified URL. For example:
<xsl:include href="http://localhost/common.xsl"/>.
Does anybody know how to get the processor to include using the classpath rather than making another request to the web server?
null

The transformer won't search the classpath, because that isn't an XSLT concept. If you want your program to control where an xsl:included document is to be loaded from, then you need to write a class that implements URIResolver and set your TransformerFactory to use it. You'd do that like this:SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();
factory.setURIResolver(new BasicURIResolver());(That's an example from code that I wrote.) That class that implements URIResolver simply has to take the href that it's given and do its own classpath search, like this:private static class BasicURIResolver implements URIResolver {
   * @see URIResolver#resolve(String, String)
  public Source resolve(String href, String base) throws TransformerException {
    String url = // some calculation from its parameters
    InputStream is = this.getClass().getResourceAsStream(url);
    return new StreamSource(is);
}The "resolve" method will be called for every xsl:include, and I had to do some debugging to see what actually gets passed in its parameters. If you want the regular processing to take place instead of your own classpath search then I believe you can return null.
You might want to invent your own convention, e.g. <xsl:include href="cp://myXSL.xsl"/>, to distinguish those XSLs for which you want to search the classpath.
By the way, I believe the default, if you don't specify any path information at all, is for the transformer to search in the same directory as the containing XSL.
PC&#178;

Similar Messages

  • Problems faced when using xsl:include and extension functions

    I am Working in XML and XSLT using Oracle's XML Parser V2.
    Previously i had worked in Microsoft technology using MSXMLParser.
    I am facing some problems in XSLT. They are as below...
    1. Using <xsl-include href="Somexsl.xsl">
    the oraclexmlparser processor is giving the error : XSL-1002: Error while processing include XSL file (no protocol: Submenu.xsl).
    * Can u tell me why i am getting this error, and what is the fix for this.
    The same case with <xsl:import> too.
    2. In case i have to write some functions in the previous WD of xsl i used these statements
    <?xml version='1.0'?>
    <!DOCTYPE PageRoot SYSTEM "../../Common/dtd/PageNavBar.dtd">
    <xsl:stylesheet
    xmlns:xsl="http://www.w3.org/TR/WD-xsl"
    xmlns:html="http://www.w3.org/TR/REC-html40"
    result-ns="">
    <xsl:script xmlns:xsl="uri:xsl"><![CDATA[
    var strWebContentPath = "/SurSITE/Content/";
    var strWebImagePath = "/SurSITE/sursitegraphics/";
    function IncScript()
    return "<script language='javascript' src='/SurSITE/Includes/avalidations.js'></script>";
    ]]>
    </xsl:script>
    To call the function i used this
    <xsl:eval no-entities='true'> IncScript();</xsl:eval>
    * Can u tell me how do i do this now, i tried with the code above using the current name space (<xsl:stylesheet version="1.1"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" />)
    Please use the example given above.
    I will be very greatfull to u if u can give me some suggestion or help for the above said problems.
    Thanking you and eagerly waiting for your reply(s).
    null

    The current version is "1.0" not "1.1"
    You haven't included the code for what your <xsl:include>
    statement looks like, which seems to be what it's complaining
    about...
    XSLT 1.0 has no <xsl:eval>, this is a microsoft specific tag
    from a pre-XSLT-1.0 version.
    XSLT 1.0 has no <xsl:script> element either.

  • XML/XSLT: Setting xsl:include href attribute with a variable

    I have a main layout stylesheet and depending on which page the user selects I want to use xsl:include to display the selected information in the 'content' DIV. The process works fine if hardcode it like this:
    <xsl:include href="welcome.xsl"/>
    <div id="content"
    <xsl:call-template name="welcome"/>
    </div>
    but, what I would like to do is have the name of the included template pulled from the xml file depending on which page was selected by the user. Something similar to this:
    <xsl:variable name="ss">
    <xsl:text><xsl:value-of select="root/stylesheet"/></xsl:text>
    </xsl:variable>
    <xsl:include href="{$ss}.xsl"/>
    <div id="content">
    <xsl:apply-template name="{$ss}"/>
    </div>
    So far I have tried using many different forms of code and have been unable to get this to work. Any ideas?
    EDIT: Okay, I have it partly figured out, at least why it isn't working. As far as I can tell, the 'xsl:include' tag must be a child of the 'xsl:stylesheet' tag, and is thus declared before the <xsl:template match="/"> which means it can't read the xml element to even store it in the variable. I have an idea of how to accomplish what I need, though.
    Last edited by munkyeetr (2009-01-28 03:29:58)

    I have attempted the same thing before as well. The only way I was able to dynamically build the xsl:include was to declare a new namespace e.g xmlns:out="output.xsl" in my XSL file and do something like the following:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:out="output.xsl">
    <xsl:namespace-alias stylesheet-prefix="out" result-prefix="xsl"/>
    <xsl:varible name="xxx" select=" 'myFile.xsl' "/>
    <xsl:template match="/">
    <out:stylesheet version="1.0">
    <out:template match="/">
    <out:include>
    <xsl:attribute name="href">
    <xsl:value-of select="$xxx" />
    </xsl:attribute>
    </out:include>
    </out:template>
    </out:stylesheet>
    </xsl:template>
    </xsl:stylesheet>
    When applied to any valid XML document this produces the XSL file you are after as the output.
    To use this output against your intended XML source consider the following: A Java program can very quickly apply the above stylesheet to any XML source to get the output you want... then apply that XSL result to the actual XML document you are wanting to transform. From here you can do what you want with the transformed result.

  • Xsl:include not resolving no matter HOW I load the xslt

    I cannot get *<xsl:include>* to work with XMLTRANSFORM in a PL/SQL environment in Oracle 11.2.0.3. I am exclusively working inside the database.
    I have a base XSLT which includes another XSLT using xsl:include. I want to load the base XSLT as an XMLTYPE and have it transform another XML document, as if the entire XSLT were one large document.
    I have loaded the base (base.xslt), the extension (include_with_base.xslt), and the combination of the two (entire_thing.xslt) in the XDB catalog. base.xslt has this statement inside its xsl:stylesheet node, attempting to include the other xslt:
    *<xsl:include href="/public/include_with_base.xslt" />*
    I have the xslts stored in XDB. This verifies they are intact:
    1. The base xslt which has the xsl:include statement in it loads just fine.
    select xdburitype('/public/base.xslt').getXML() from dual;
    2. The extension which is the target of the include reference in the base xslt loads just fine.
    select xdburitype('/public/include_with_base.xslt').getXML() from dual;
    3. The combination of the two, where I cut-and-paste all children of xslt:stylesheet from include_with_base.xslt into the xslt:stylesheet node of base.xslt also loads just fine.
    select xdburitype('/public/entire_thing.xslt').getXML() from dual;
    However, when I try to execute a transformation of some test xml using base.xslt, it fails:
    select XMLTRANSFORM(xdburitype('/public/xml_input.xml').getXML(), xdburitype('/public/base.xslt').getXML()) FROM dual;
    When I try to execute the same transformation of the same test xml using entire_thing.xslt, it works:
    select XMLTRANSFORM(xdburitype('/public/xml_input.xml').getXML(), xdburitype('/public/entire_thing.xslt').getXML()) FROM dual;
    When I perform the transformation using altovaxml and the two xslts are in the same disk directory (and I use a relative reference with no path information rather than an absolute reference like I show in the examples above), the transformation works just fine.
    What can I do to make XMLTRANSFORM work with an XSLT that has an essential <xsl:include ... /> reference in it?
    Edited by: user11359697 on Apr 15, 2013 1:49 PM

    For fun, here's an implementation of what I would call the "poor man" include.
    The query takes the URI of the main stylesheet as input and recursively replaces all xsl:include directives with the content of the corresponding stylesheet.
    It supports relative URIs.
    Test case :
    */public/include1.xsl*
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:include href="./include2.xsl"/>
      <xsl:template name="test">
        <TEST/>
      </xsl:template>
    </xsl:stylesheet>
    {code}
    */public/include2.xsl*
    {code:xml}
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template name="test2">
        <TEST2/>
      </xsl:template>
    </xsl:stylesheet>
    {code}
    */public/main.xsl*
    {code:xml}
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:include href="./include1.xsl"/>
      <xsl:template match="/">
        <xsl:call-template name="test"/>
      </xsl:template>
    </xsl:stylesheet>
    {code}
    and the query that rebuilds the complete stylesheet :
    {code}
    SQL> select xmlserialize(document      -- for display purpose
      2           xmlquery(
      3           'declare namespace xsl = "http://www.w3.org/1999/XSL/Transform"; (::)
      4            declare function local:include($href as xs:string) as element(xsl:stylesheet)
      5            {
      6              copy $d := fn:doc($href)/xsl:stylesheet
      7              modify (
      8                for $i in $d/xsl:include
      9                return replace node $i
    10                       with local:include(resolve-uri($i/@href, $href))/child::*
    11              )
    12              return $d
    13            }; (::)
    14            local:include($main_xsl)'
    15           passing '/public/main.xsl' as "main_xsl"
    16           returning content
    17           )
    18         indent
    19         )
    20  from dual;
    XMLSERIALIZE(DOCUMENTXMLQUERY(
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template name="test2" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <TEST2/>
      </xsl:template>
      <xsl:template name="test" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <TEST/>
      </xsl:template>
      <xsl:template match="/">
        <xsl:call-template name="test"/>
      </xsl:template>
    </xsl:stylesheet>
    {code}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Multiple XSL's from one XML?

    So I've got this XML file pointing to an XSL stylesheet, and
    its working great (client-side goin' on here), and yet I begin to
    wonder about the efficiency improvements (since I took data from 3
    HTML pages, and coded it as one XML file) if you can only apply one
    XSL stylesheet to one XML file. Kinda defeats the purpose if you
    have to write two more XML files for two more XSL stylesheets, eh?
    Then I'd be left with 6 files where I started with 3, and the same
    management nightmare. Anyone have a solution to this perplexity,
    cause it doesn't seem like its been solved easily in the forums
    here or anywhere I can find on the Web. I'm thinking maybe
    conditionals, but I'm not sure where to go from there. Thanks in
    advance!

    I'm going to need a little more detail. I have very little
    ASP experience. Are you saying to use the <xsl:include> tag
    in the individual XSL Stylesheets to pull only the data I want from
    the XML file? That's the idea. I've already got different repeat
    areas setup in three different XSL files, each pulling different
    areas of the XML file. But then, how would I direct the browser to
    display the correct XSL file to begin with, when the original call
    to display it is just a link to the XML file, which can only push
    out one of the XSL files to the viewer?

  • Xsl:include, dynamic href attribute

    Is it possible to use a xsl parameter or variable for the href attribute of xsl:include ?
    I tried
    <xsl:param name="xxx" />
    and then <xsl:include href="{$xxx}"/>
    or even
    <xsl:include>
    <xsl:attribute name="href">
    <xsl:value-of select="$xxx" />
    </xsl:attribute>
    </xsl:include>
    None of this works (I haven't tried with other xslt processors than Oracle).
    Any suggestions ?
    null

    I have attempted the same thing before as well. The only way I was able to dynamically build the xsl:include was to declare a new namespace e.g xmlns:out="output.xsl" in my XSL file and do something like the following:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:out="output.xsl">
    <xsl:namespace-alias stylesheet-prefix="out" result-prefix="xsl"/>
    <xsl:varible name="xxx" select=" 'myFile.xsl' "/>
    <xsl:template match="/">
    <out:stylesheet version="1.0">
    <out:template match="/">
    <out:include>
    <xsl:attribute name="href">
    <xsl:value-of select="$xxx" />
    </xsl:attribute>
    </out:include>
    </out:template>
    </out:stylesheet>
    </xsl:template>
    </xsl:stylesheet>
    When applied to any valid XML document this produces the XSL file you are after as the output.
    To use this output against your intended XML source consider the following: A Java program can very quickly apply the above stylesheet to any XML source to get the output you want... then apply that XSL result to the actual XML document you are wanting to transform. From here you can do what you want with the transformed result.

  • Xalan, xsl:include, The system cannot find the file specified

     

    Hi
    Xalan is unable to parse stylesheets which contain xsl:include
    directives, even if the file being included is in the same directory.
    I'm currently porting our web application to weblogic 6.0 sp2 running on
    Windows 2000. The application works fine except for one annoying problem,
    this problem only manifests on Weblogic 6.0 sp2.
    I've got a servlet which makes use of a jsp tag. The tag uses the
    ServletContext.getResource() to reference a stylesheet in the webapps' xsl
    subdirectory. If that stylesheet contains an xsl:include e.g. <xsl:include
    href="myother.xsl"/>, myother.xsl is contained in the same directory as the
    stylesheet containing the include. Xalan fails to parse the stylesheet. The
    following exception is thrown "org.apache.xalan.XSLProcessorException: The
    system cannot find the file specified".
    I've currently amended the weblogic classpath as follows
    set
    CLASSPATH=.;c:\myjars\xerces.jar;c:\myjars\xalan.jar;c:\myjars\bsf.jar;c:\my
    jars\js.jar;.\lib\weblogic_sp.jar;.\lib\weblogic.jar
    xerces v1.4
    xalan v1.2.2
    bsf (as supplied with xalan 1.2.2)
    js (Mozilla Rhino 15R2)
    The code in the jsp tag to load the stylesheet is as follows
    XSLTProcessor processor =
    XSLTProcessorFactory.getProcessorUsingLiaisonName("org.apache.xalan.xpath.xd
    om.XercesLiaison");
    URL styleSheetUrl =
    pageContext.getServletContext().getResource("/xsl/myxsl.xsl");
    StylesheetRoot stylesheet = processor.processStylesheet(new
    XSLTInputSource(styleSheetUrl.toExternalForm()));
    Any help would be appreciated.
    Regards
    Tony

  • Will too many "xsl:include"s affect performance?

    I have one main stylesheet which includes 5 other stylesheets. I would like to know which way is better for the performance:
    use 5 <xsl:include href="file.xsl"/> in the main stylesheet?
    or put all the codes from those 5 files directly into the main stylesheet?
    Thanks!
    Wenqi

    Hi Wenqi!
    I'm using up to 15 include files. This makes utvecklingen easier. I didn't find a loss in the perfomance. The stylesheet cache has to be big enough.

  • Gif file in a xsl:include

    Hi,
    Can a .gif file be included in a xsl:include?
    I cannot use <img src="/images/delete.gif"/> since the "src" part is
    1)going to be dynamic and
    2)cannot be returned as a TAG in the XML as well.
    Thanks in advance...

    why can't you make the image path a variable or parameter...
    <xsl:param name="imgPath" select="your_code_or_set_it_externally" />
    <IMG>
         <xsl:attribute name="SRC">
              <xsl:value-of select="$imgPath" />
         </xsl:attribute>
    </IMG>

  • Generate an XSL file from table data

    Hi
    How can I generate XSL file from data stored in Oracle table, please?
    oracle 9.2.0.8 on AIX
    thanks
    Orna

    Do you mean XML file?
    Actually given an XSL file is just a version of an XML file the answer doesn't really matter.
    One option would be to use XMLElement, XMLForest, XMLAgg, etc in a SQL statement.
    Another option is to use the xmldom package to build a DOMDocument. (I think that is the package name in 9i)

  • Problem using jsp:include from inside a custom tag

    Hi, All !
              I have a problem using <jsp:include> from inside a custom tag. Exception is:
              "java.lang.ClassCastException: weblogic.servlet.jsp.BodyContentImpl"
              Apparently, weblogic tries to cast BodyContentImpl to JspWriterImpl and
              could not do this. Is it a bug, since in the 1.1 spec is said: "The
              BodyContent is a subclass of JspWriter that can be used to process body
              evaluations so they can retrieved later on."
              My code is:
              <wfmklist:items>
              <jsp:include page="item.jsp" flush="true"/>
              </wfmklist:items>
              

    This is an area of contention with WL. It is not so tolerant with regards to
              the spec. I spent several days recently trying to convince it to accept the
              specification in regards to bodies and includes and it appears to have
              successfully rebuffed my efforts.
              Frankly, this is very disappointing. It appears that some shortcuts were
              taken on the way to JSP 1.1 support, and the result is a very hard-coded,
              inflexible implementation. As I have not seen the implementation myself, I
              hate to assume this, however one could posit that the term "interface" was a
              foreign concept during the implementation, other than as some annoying
              intermediary reference requiring an immediate cast to a specific Weblogic
              class, which in turn is apparently required to be final or have many final
              methods, as if being optimized for a JDK 1.02 JIT.
              I am sorry that I don't have any positive suggestions other than to use a
              URL object to come back in an execute the necessary "include" directly. You
              lose all context (other than session) and that can cause its own problems.
              However, you can generally get the URL approach to work, and you will
              hopefully avoid further frustration.
              Peace,
              Cameron Purdy
              Tangosol, Inc.
              http://www.tangosol.com
              Tangosol: How Weblogic applications are customized
              "Denis" <[email protected]> wrote in message
              news:[email protected]...
              > Hi, All !
              > I have a problem using <jsp:include> from inside a custom tag. Exception
              is:
              > "java.lang.ClassCastException: weblogic.servlet.jsp.BodyContentImpl"
              >
              > Apparently, weblogic tries to cast BodyContentImpl to JspWriterImpl and
              > could not do this. Is it a bug, since in the 1.1 spec is said: "The
              > BodyContent is a subclass of JspWriter that can be used to process body
              > evaluations so they can retrieved later on."
              >
              > My code is:
              > ...
              > <wfmklist:items>
              > <jsp:include page="item.jsp" flush="true"/>
              > </wfmklist:items>
              > ...
              

  • Server-side includes from a table

    The instructions are very basic and do not include instructions on how to use server-side includes from a table.
    I can find nothing on Google or at Adobe on this subject, not even on the old InterAKT site.
    Has anyone got a demo, tutorial etc. or just some advice please.
    I have created a table in the database, embedded the script in the page but what now?
    I find the server-side includes from a list easy to use but it has limitations that I hope server-side includes from a table will overcome.

    I found the answer, all on my own. Go to http://www.interaktonline.com/Documentation/MXKollection/108000_sever_side_includes.htm
    Its a video demo and all is revealed.

  • How do you automatically include from a reply

    How do you automatically include
    < <
    from a reply to someonelses post.
    Do you type it manually

    BTW, in case there are any Americans out there,AA
    has
    nothing at all to do with alcohol dependency inthis
    case - it's the Automobile Association.
    RObinThanks for that
    RPWithey and God bless you
    By George he's got it!
    That's not what he asked for :?

  • Xsl:include xsl:import and clob

    I can use xslprocessor.processXSL to perform transformation where the XML and XSL are in CLOBs.
    However, is it possible to perform transformation if the XML and XSLs are in CLOBs and the XSL have xsl:include and xsl:import?
    Thanks and Regards,
    Andy

    It will be supported in later release.

  • xsl:include in XSL Workshop

    I am trying to use <xsl:include> for some proxy stylesheet. I use the form
    <xsl:include href="filename.xsl" />
    I get the following error when process the stylesheet:
    'Bad URI found while including/importing file: no protocol: filename.xsl'
    Currently I am just working with the workshops, I have not deployed the xsl stilesheets yet to the server.
    Everything works as expected in XMLSpy.
    Does anybody have an example of a working <xsl:include>?

    what about putting that file in the respository? or set up the XMLDIR and put it there? I have never done it but just a though.
    Ben

Maybe you are looking for

  • How do I add multiple family members to eprint capability on my 8600 pro?

    I dont know how to add my wife and son to the eprint capability on my 8600 pro, i tried adding them as seperate users under hp connected but it wont let you use the claim code more than once.  Anyone have any ideas?  I'm sure someone has done this be

  • Is there a way to make the current row not editable

    Hi, I'm using JDev 11.1.1.2 In my usecase I have a Form , navigateable with next/previous , and for every row a I have a calculation which makes the row editable or not. For now I made it with disabled property on every input component set to some be

  • How to set up validations in controlling

    Hi All, I have an issue. I have set up planning for all cost elements and internal orders. While posting actual amounts greater than planned amount. The system should pop up an error messgae. How to set up validation for this issue. Regards Arun

  • Issues in retrieving the Planning profiles in CRM from BW while doing CRM-BI Integration

    Dear Folks, We are in the process of doing the SAP CRM & BI Integration wrt Trade Promotion Mangement. For testing purposes, we tried to create a planning profile in BPS end i.e BW SEM system & trying to retrieve it from the CRM system using the belo

  • Read receipts - help!!

    My bby curve 8830 is sending read receipts to people who request them of me. I want to NOT send any. I go to Options/Email settings but it does not allow me to control read receipts on my corporate/company issued email address (master account for the