首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

JAXP在Spring中使用

2012-07-15 
JAXP在Spring中应用???? 在阅读spring源码的过程中,想看下spring对xml的解析,发现是用的jaxp相关API实现的

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);      }
?

?

热点排行