栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用SAX解析常见的XML元素

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用SAX解析常见的XML元素

以下是我对类似问题的答案(使用sax跳过节点)。它演示了如何在XMLReader上交换内容处理程序。

在此示例中,ContentHandler中交换的内容只是忽略所有事件,直到它放弃控制为止,但您可以轻松地调整该概念。


您可以执行以下操作:

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.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader;public class MyContentHandler implements ContentHandler {    private XMLReader xmlReader;    public MyContentHandler(XMLReader xmlReader) {         this.xmlReader = xmlReader;     }    public void setdocumentLocator(Locator locator) {     }    public void startdocument() throws SAXException {     }    public void enddocument() throws SAXException {     }    public void startPrefixMapping(String prefix, String uri)  throws SAXException {     }    public void endPrefixMapping(String prefix) throws SAXException {     }    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));     }    public void ignorableWhitespace(char[] ch, int start, int length)  throws SAXException {     }    public void processingInstruction(String target, String data)  throws SAXException {     }    public void skippedEntity(String name) throws SAXException {     }}

忽略ContentHandler

当IgnoringContentHandler完成吞咽事件后,它将控制权传递回您的主ContentHandler。

import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader;public class IgnoringContentHandler implements ContentHandler {    private int depth = 1;     private XMLReader xmlReader;     private ContentHandler contentHandler;    public IgnoringContentHandler(XMLReader xmlReader, ContentHandler contentHandler) {         this.contentHandler = contentHandler;         this.xmlReader = xmlReader;     }    public void setdocumentLocator(Locator locator) {     }    public void startdocument() throws SAXException {     }    public void enddocument() throws SAXException {     }    public void startPrefixMapping(String prefix, String uri)  throws SAXException {     }    public void endPrefixMapping(String prefix) throws SAXException {     }    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);         }     }    public void characters(char[] ch, int start, int length)  throws SAXException {     }    public void ignorableWhitespace(char[] ch, int start, int length)  throws SAXException {     }    public void processingInstruction(String target, String data)  throws SAXException {     }    public void skippedEntity(String name) throws SAXException {     }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号