1 16 package org.apache.cocoon.components.xpointer; 17 18 import org.apache.avalon.framework.service.ServiceManager; 19 import org.apache.cocoon.xml.XMLConsumer; 20 import org.apache.cocoon.xml.dom.DOMStreamer; 21 import org.apache.cocoon.ResourceNotFoundException; 22 import org.apache.excalibur.xml.xpath.XPathProcessor; 23 import org.w3c.dom.Document ; 24 import org.w3c.dom.NodeList ; 25 import org.xml.sax.SAXException ; 26 import org.xml.sax.helpers.LocatorImpl ; 27 28 31 public class XPointerPart implements PointerPart { 32 private String expression; 33 34 public XPointerPart(String expression) { 35 this.expression = expression; 36 } 37 38 public boolean process(XPointerContext xpointerContext) throws SAXException , ResourceNotFoundException { 39 Document document = xpointerContext.getDocument(); 40 ServiceManager manager = xpointerContext.getServiceManager(); 41 XPathProcessor xpathProcessor = null; 42 try { 43 try { 44 xpathProcessor = (XPathProcessor)manager.lookup(XPathProcessor.ROLE); 45 } catch (Exception e) { 46 throw new SAXException ("XPointerPart: error looking up XPathProcessor.", e); 47 } 48 NodeList nodeList = xpathProcessor.selectNodeList(document, expression, xpointerContext); 49 if (nodeList.getLength() > 0) { 50 XMLConsumer consumer = xpointerContext.getXmlConsumer(); 51 LocatorImpl locator = new LocatorImpl (); 52 locator.setSystemId(xpointerContext.getSource().getURI()); 53 consumer.setDocumentLocator(locator); 54 for (int i = 0; i < nodeList.getLength(); i++) { 55 DOMStreamer streamer = new DOMStreamer(); 56 streamer.setConsumer(consumer); 57 streamer.stream(nodeList.item(i)); 58 } 59 return true; 60 } else { 61 if (xpointerContext.getLogger().isDebugEnabled()) 62 xpointerContext.getLogger().debug("XPointer: expression \"" + expression + "\" gave no results."); 63 return false; 64 } 65 } finally { 66 if (xpathProcessor != null) 67 manager.release(xpathProcessor); 68 } 69 } 70 } 71 | Popular Tags |