You can do something like the following:
import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.XMLReader; public class Demo { public static void main(String[] args) throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.setContentHandler(new MyContentHandler(xr)); xr.parse("input.xml"); } }
Mycontenthandler
This class is responsible for processing your XML document. When you click on the node you want to ignore, you can swap the IgnoringContentHandler, which will swallow all the events for that node.
import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class MyContentHandler extends DefaultHandler { private XMLReader xmlReader; public MyContentHandler(XMLReader xmlReader) { this.xmlReader = xmlReader; } public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { if ("sodium".equals(qName)) { xmlReader.setContentHandler(new IgnoringContentHandler(xmlReader, this)); } else { System.out.println("START " + qName); } } public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("END " + qName); } public void characters(char[] ch, int start, int length) throws SAXException { System.out.println(new String(ch, start, length)); } }
IgnoringContentHandler
When the IgnoringContentHandler swallows events, it transfers control to your primary ContentHandler.
import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class IgnoringContentHandler extends DefaultHandler { private int depth = 1; private XMLReader xmlReader; private ContentHandler contentHandler; public IgnoringContentHandler(XMLReader xmlReader, ContentHandler contentHandler) { this.contentHandler = contentHandler; this.xmlReader = xmlReader; } public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { depth++; } public void endElement(String uri, String localName, String qName) throws SAXException { depth--; if(0 == depth) { xmlReader.setContentHandler(contentHandler); } } }
Blaise donough
source share