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