[xsl] unknown protocol classpath

Subject: [xsl] unknown protocol classpath
From: <qmjo038@xxxxxxxxx>
Date: Wed, 17 May 2006 07:00:06 -0700 (PDT)
   Hi,
I want to perform a following task: having over a few
hundreds XML files, I want to remove from all of them
such nodes that match a certain pattern, while
preserving their original structure as much as
possible. 

"Typically, my XML file looks like that: 
<?xml version="1.0"?> 

<!DOCTYPE NODE SYSTEM
'classpath:///wf/core/base/prm/resources/prm.dtd'> 

<NODE>Master 
  <SPLIT> 
    <LEAF>foo 
    <BOOLEAN>false 
    </BOOLEAN> 
    </LEAF> 
    <LEAF>blah 
    <BOOLEAN>true 
    </BOOLEAN> 
    </LEAF> 
  </SPLIT> 
</NODE>

My XSL looks like that: 
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";> 
    <xsl:output method="xml" indent="yes"
doctype-system='classpath:///wf/core/base/prm/resources/prm.dtd'
/> 

    <xsl:template match="//LEAF[starts-with(.,
'blah')]"> 
    </xsl:template> 

<xsl:template match="@*|node()"> 
  <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
  </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

I am using the following Java 1.5 code (and Xalan
processor, I guess) to run it: 

import javax.xml.transform.Result; 
import javax.xml.transform.Source; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import
javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 
import java.io.File; 

public class Doo { 
    public static void main(String[] args) { 
        if (args.length != 3) { 
            System.out.println("Usage: <input XML
file> <XSL file> <output XML file>"); 
            return; 
        } 

        TransformerFactory factory =
TransformerFactory.newInstance(); 
        Source source = new
StreamSource(use(args[0])); 
        Source xslt = new StreamSource(use(args[1])); 
        Result target = new
StreamResult(use(args[2])); 
        try { 
            Transformer transformer =
factory.newTransformer(xslt); 
            transformer.transform(source, target); 
        } catch (TransformerConfigurationException e)
{ 
            e.printStackTrace(); 
        } catch (TransformerException e) { 
            e.printStackTrace(); 
        } 
    } 

    private static File use(String arg) { 
        System.out.println(arg); 
        return new File(arg); 
    } 
} 

Then I get the following exception:
java.net.MalformedURLException: unknown protocol:
classpath 
        at java.net.URL.<init>(URL.java:574) 
        at java.net.URL.<init>(URL.java:464) 
        at java.net.URL.<init>(URL.java:413) 
        at
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:968)

        at
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:905)

        at
com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:872)

        at
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:282)

        at
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDocumentScannerImpl.java:1021)

        at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)

        at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)

        at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)

        at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)

        at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)

        at
com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:387)

        at
com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.getDTM(XSLTCDTMManager.java:228)

        at
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getDOM(TransformerImpl.java:472)

        at
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:640)

        at
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:279)

        at wf.core.tool.config.Doo.main(Doo.java:34) 

Without DOCTYPE declaration in the source XML, XSL
works (almost) fine. Declaring file instead of
classpath gets understood also."

Thanks.

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam
protection around 
http://mail.yahoo.com 

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Current Thread