xml的sax解析

public void parseXml04(){  
	       String xmlPath = "C:\\Users\\asus\\Desktop\\map.osm.xml";    
	    try {  
	        //获取SAX分析器的工厂实例,专门负责创建SAXParser分析器  
	        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();  
	        //获取SAXParser分析器的实例  
	        SAXParser saxParser = saxParserFactory.newSAXParser();  
	           InputStream inputStream = new FileInputStream(new File(xmlPath));    
	          
	        //解析xml文档  
	        saxParser.parse(inputStream, new XmlSAXHandler04());  
	          
	        //迭代list  
	        System.out.println(nodes.size()+","+ways.size());
	        if (XmlRead.ways.size()>0) {
				for (Way way:XmlRead.ways) {
					System.out.println("-----------------------------------------");
					System.out.println("【Id】"+way.getId());
					for (String string:way.getList()) {
						System.out.println("【Nd】"+string);
					}
				}
			}
	    } catch (ParserConfigurationException e) {  
	        e.printStackTrace();  
	    } catch (SAXException e) {  
	        e.printStackTrace();  
	    } catch (FileNotFoundException e) {  
	        e.printStackTrace();  
	    } catch (IOException e) {  
	        e.printStackTrace();  
	    }  
	}  
class XmlSAXHandler04 extends DefaultHandler {    
    
      
    @Override  
    public void startDocument() throws SAXException {  
        XmlRead.nodes=new ArrayList<Node>();
        XmlRead.ways=new ArrayList<Way>();
        XmlRead.list=new ArrayList<String>();
    }  
      
    @Override  
    public void endDocument() throws SAXException {  
          
    }  
      
    @Override  
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {  
 
         
        if (qName.equals("node")) {
			XmlRead.node=new Node();
			if (attributes.getLength()>0) {
				XmlRead.node.setIdString(attributes.getValue("id").toString());
				XmlRead.node.setLat(attributes.getValue("lat").toString());
				XmlRead.node.setLon(attributes.getValue("lon").toString());
			}
		}
        if (qName.equals("way")) {
			XmlRead.way=new Way();
			if (attributes.getLength()>0) {
				XmlRead.way.setId(attributes.getValue("id").toString());
			}
		}
        if (qName.equals("nd")) {
			XmlRead.list=new ArrayList<String>();
			if (attributes.getLength()>0) {
				XmlRead.string=attributes.getValue("ref").toString();
//				System.out.println(XmlRead.list.size());
			}
		}
    }  
  
    @Override  
    public void endElement(String uri, String localName, String qName) throws SAXException {  
        //需要说明的是,因为每一个非空标签都有characters(),那么无法知道user子标签循环完了  
        //但是可以这样,如果不考虑子标签顺序可以判断是否解析到了最后一个子标签来判断  
        //或者直接在user标签的endElement()中添加即可。  
 
        
        
        
        if (qName.equals("node")) {
			XmlRead.nodes.add(XmlRead.node);
			XmlRead.node=null;
		}
        if (qName.equals("way")) {
        	XmlRead.way.setList(XmlRead.list);
			XmlRead.ways.add(XmlRead.way);
			System.out.println(XmlRead.list.size());
			XmlRead.way=null;
			XmlRead.list=null;
		}
        if (qName.equals("nd")) {
			XmlRead.list.add(XmlRead.string);
			XmlRead.string=null;
		}
    }  
      
    @Override  
    public void characters(char[] ch, int start, int length) throws SAXException {  

    }  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值