十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章给大家分享的是有关如何对XML进行Sax解析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
成都创新互联公司主要从事网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务于都,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220对XML进行Sax解析:
一、对XML进行Sax解析:
Sax解析XML是事件驱动的,安装XML的顺序一步一步进行解析的.优点不用事先调入整个文档,占用资源少,缺点是事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素.
二、实现:
1.创建一个XMl文档:
scott scott sys sys system system
2.开始解析:
package Sax解析Xml; import java.io.File; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxParser { public static void main(String[] args) { // 1.实例化SaxParserFactory对象 SAXParserFactory factory = SAXParserFactory.newInstance(); try { // 2.创建解析器: SAXParser saxParser = factory.newSAXParser(); // 3.获取需要解析的文档,生成解析器,解析文档 File xmlFile = new File("myXml\\cb.xml"); MyHandler handler = new MyHandler(); // 开始解析: saxParser.parse(xmlFile, handler); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static class MyHandler extends DefaultHandler { // 作用是来记录解析的上一个节点的名称 private String preTag = null; private boolean ifEnd =false; private String getName; private String getPwd; @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub // super.characters(ch, start, length); if (preTag != null) { if ("name".equals(preTag)) { getName = new String(ch, start, length); } else if ("pwd".equals(preTag)) { getPwd = new String(ch, start, length); ifEnd=true; System.out.println(""+getName+" "); System.out.println(""+getPwd+" "); } } } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub // super.endDocument(); System.out.println(" "); System.out.println("--------------------------"); System.out.println("解析XML完毕"); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if(ifEnd==true){ System.out.println(" "); ifEnd=false; } //当一个标签解析完后,preTag设置为null; preTag = null; } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("开始解析XML文件"); System.out.println("------------------------------"); System.out.println(""); System.out.println(""); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub // if ("user".equals(qName)) { String s = qName; String s1 = attributes.getValue(0);// Id String s2 = attributes.getLocalName(0); //System.out.println(s + s1 + s2); System.out.println(" <"+qName+" "+"id="+"\""+s1+"\""+">"); } preTag = qName; } } }
三、运行结果:
四、补充说明:
1.执行顺序:
由于Sax解析是按照xml文件的顺序来解析,当读入时,会调用startDocument()方法,当读入
2.内部类加static关键字:
内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以在不做其他变动的情况下,最简单的解决办法是将public class改为public static class.
3.startElement(String uri, String localName, String qName,Attributes attributes) 方法的参数解释:
感谢各位的阅读!关于“如何对XML进行Sax解析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。