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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--