`
kim_miao
  • 浏览: 188778 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

    java面试宝典

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

    千方百计笔试题大全

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

    Java面试宝典2010版

    10、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中? 11、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp...

    最新Java面试宝典pdf版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    java开发常用jar包

    它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的 banner,一致的版权,等等。它不仅仅能处理动态的内容,如jsp,php,asp等产生的内容,它也能处理静态的内容,使得它的内容...

    Java面试笔试资料大全

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    JAVA面试宝典2010

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Java面试宝典-经典

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    java面试题大全(2012版)

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Java面试宝典2012版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    java面试宝典2012

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 98 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Java面试宝典2012新版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

Global site tag (gtag.js) - Google Analytics