JAXP在Spring中应用

     在阅读spring源码的过程中,想看下spring对xml的解析,发现是用的jaxp相关API实现的.于是想写个小demo,以加深对代码的理解.

1.用JAXP解析XML文档
Java有多种方法可以分析XML文档,你可以选择现在已经成熟的标准技术,比如DOM和SAX,或者你可以选择专用于处理XML的Java API (Java API for XML Processing,JAXP)。JAXP是一种专门提供XML文档解析的Java接口,下面简单介绍下.


2.用JAXP解析XML的步骤

(1)得到DocumentBuilderFactory解析器的工厂实例
    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

(2)从DocumentBuilder中工厂获得 DOM 解析器
    DocumentBuilder dombuilder=domfac.newDocumentBuilder();

(3)解析 XML 文档的输入流,得到一个 Document
    Document doc=dombuilder.parse(is);

(4)得到 XML 文档的根节点
    Element root=doc.getDocumentElement();

(5)得到节点的子节点

    NodeList beans=root.getChildNodes();


3.一个简单的Demo
demo.xml的内容如下: 

<?xml version="1.0" ?>  
<beans>  
    <bean id="beanId">  
        <property>spring</property>  
    </bean>  
</beans>
    public class JAXPDemo {  
      
        public static void main(String[] args) {  
            String filename = "E:/demo/demo.xml";  
      
            try {  
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
                DocumentBuilder documentBuilder = factory.newDocumentBuilder();  
                Document document = documentBuilder.parse(filename);  
                Element root = document.getDocumentElement();  
                NodeList beans = root.getChildNodes();  
      
                for (int i = 0; i < beans.getLength(); i++) {  
                    Node bean = beans.item(i);  
                    if (bean.getNodeType() == Node.ELEMENT_NODE) {  
                        //取得节点的属性值     
                        String beanId = bean.getAttributes().getNamedItem("id").getNodeValue();  
                        System.out.println(beanId);  
      
                        for (Node node = bean.getFirstChild(); node != null; node = node  
                            .getNextSibling()) {  
                            if (node.getNodeType() == Node.ELEMENT_NODE) {  
                                if (node.getNodeName().equals("property")) {  
                                    String name = node.getNodeName();  
                                    String nodeValue = node.getFirstChild().getNodeValue();  
                                    System.out.println(name);  
                                    System.out.println(nodeValue);  
                                }  
                            }  
                        }  
                    }  
                }  
      
            } catch (Exception e) {  
      
            }  
        }  
    }

 

4.Spring中对xml文件的解析

Spring对xml文件的解析也是使用了JAXP,在其实现类中DefaultDocumentLoader可以看到.

    public Document loadDocument(InputSource inputSource, EntityResolver entityResolver,  
            ErrorHandler errorHandler, int validationMode, boolean namespaceAware) throws Exception {  
  
            DocumentBuilderFactory factory = createDocumentBuilderFactory(validationMode, namespaceAware);  
            if (logger.isDebugEnabled()) {  
                logger.debug("Using JAXP provider [" + factory.getClass().getName() + "]");  
            }  
            DocumentBuilder builder = createDocumentBuilder(factory, entityResolver, errorHandler);  
            return builder.parse(inputSource);  
    }
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值