对含有命名空间的xml进行解析

这是网上一个人模拟spring IOC 加载xml部分的代码,
作者使用的saxReader进行解析的xml的。对于逐步(顺序)进行解析xml,saxReader是一种比较好的选择。
private void readXML(String filename) {  
           SAXReader saxReader = new SAXReader();     
            Document document=null;     
            try{  
             URL xmlpath = this.getClass().getClassLoader().getResource(filename); //通过classLoader实例的getResource获取classPath下的filename文件的URL。 
             document = saxReader.read(xmlpath); //saxReader通过一个URL读取xml到documnet中。 
//因为xml是带有命名空间的,所以需要设置查询路径,然后通过查询路径的selectNodes(查找范围的节点)获取想要遍历的List<element>集合。
             Map<String,String> nsMap = new HashMap<String,String>();  
             nsMap.put("ns","http://www.springframework.org/schema/beans");//设置命名空间变量  
             XPath xsub = document.createXPath("//ns:beans/ns:bean");
// 两个反斜杠代表从根上开始,创建beans/bean查询路径  
             xsub.setNamespaceURIs(nsMap);//设置命名空间  
             List<Element> beans = xsub.selectNodes(document);//获取文档下所有bean节点   
             for(Element element: beans){  
                String id = element.attributeValue("id");//获取id属性值  
                String clazz = element.attributeValue("class"); //获取class属性值          
                Definition beanDefine = new Definition(id, clazz);  
                XPath propertysub =  element.createXPath("ns:property"); 
//获取命名空间下的property的查询路径
                propertysub.setNamespaceURIs(nsMap);//设置命名空间  
                List<Element> propertys = propertysub.selectNodes(element);  
                for(Element property : propertys){                    
                    String propertyName = property.attributeValue("name");//元素内部引用的属性也获取  
                    String propertyref = property.attributeValue("ref");  
                    ProsDefinition propertyDefinition = new ProsDefinition(propertyName, propertyref);  
                    beanDefine.getPropertys().add(propertyDefinition);  
                }  
                beanDefines.add(beanDefine);  
             }   
            }catch(Exception e){     
                e.printStackTrace();  
            }  
    }  

你可能感兴趣的:(对含有命名空间的xml进行解析)