您可以执行以下操作:
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
此类负责处理您的XML文档。击中要忽略的节点时,可以在IgnoringContentHandler中进行交换,这将吞噬该节点的所有事件。
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)); }}忽略ContentHandler
当IgnoringContentHandler完成吞咽事件后,它将控制权传递回您的主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); } }}


