对XML进行Dom解析

XML进行Dom解析:

 一、XML进行Dom解析:

 XML:可拓展的标记语言,主要用来存储数据.

 Dom解析:在内存建立和xml文件相对应的树形结构数据.核心是节点,本质是节点的集合,用Dom解析Xml优点是方便操作内存中树的节点,获取需要的数据.缺点是如果Xml很大,使用Dom就会很占用内存资源

 

 二、实现:

 1.创建一个Xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<oracle>
    <user id="1">
       <name>scott</name>
       <pwd>scott</pwd>
    </user>

    <user id="2">
       <name>sys</name>
       <pwd>sys</pwd>
    </user>

    <user id="3">
       <name>system</name>
       <pwd>system</pwd>
    </user>
</oracle>

 

 2.开始解析:

扫描二维码关注公众号,回复: 824381 查看本文章
package Dom解析XML;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DOMParser {

	public static void main(String[] args) {
		DOMParser cb = new DOMParser();
		
		// 1.创建DocumentBuilderFactory工厂对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try {
			// 2.创建解析器DocumentBuilderFactory对象
			DocumentBuilder builder = factory.newDocumentBuilder();

			// 3.创建文档对象
			Document document = builder.parse("myXml\\cb.xml");

			// 4.获取文档的根元素节点,root节点
			Element element = document.getDocumentElement();
			System.out.println("获得的根目录的名称:" + element.getNodeName());

			NodeList userList = element.getElementsByTagName("user");
			System.out.println("获得的用户的个数:" + userList.getLength());

			// 5.遍历user,得到user的其他信息
			System.out.println("开始解析:---------------------------------");
			for (int i = 0; i < userList.getLength(); i++) {

				Element user = (Element) userList.item(i);
				// 对应的ID
				String userId = user.getAttribute("id");

				NodeList userChids = user.getChildNodes();
			    System.out.println("用户编号:"+userId);
				
			    //遍历当前用户下的所有子孩子
			    for (int j = 0; j < userChids.getLength(); j++) {
					
			    	//去除#text,主要是使用org.w3c.dom.Node进行解析的,
			    	//会将你的回车符号也作为一个节点的.
			    	if (userChids.item(j) instanceof Element) {
						System.out.println(userChids.item(j).getNodeName()
								+ "<>" + userChids.item(j).getTextContent());

					}

				}
			}
			
			cb.More(element);

		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public void More(Element element){

		System.out.println("以XML显示:-------------------");
		String getRootName=element.getNodeName();
		System.out.println("<?xml version="+"\""+1.0+"\""+ "encoding="+"\""+"UTF-8"+"\""+"?"+">");
		System.out.println(" <"+getRootName+">");
		NodeList userList = element.getElementsByTagName("user");
		//System.out.println("获得的用户的个数:" + userList.getLength());

		// 5.遍历user,得到user的其他信息
		//System.out.println("开始解析:---------------------------------");
		for (int i = 0; i < userList.getLength(); i++) {

			Element user = (Element) userList.item(i);
			// 对应的ID
			String userId = user.getAttribute("id");

			NodeList userChids = user.getChildNodes();
		    System.out.println("  <"+"user id="+"\""+userId+"\""+">");
			
		    //遍历当前用户下的所有子孩子
		    for (int j = 0; j < userChids.getLength(); j++) {
				
		    	//去除#text,主要是使用org.w3c.dom.Node进行解析的,
		    	//会将你的回车符号也作为一个节点的.
		    	if (userChids.item(j) instanceof Element) {
					//System.out.println(userChids.item(j).getNodeName()
							//+ "<>" + userChids.item(j).getTextContent());
		    		
		    		String getName =userChids.item(j).getNodeName();
		    		String getContent =userChids.item(j).getTextContent();
		    		System.out.println("   <"+getName+">"+getContent+"</"+getName+">");

				}

			}
		    
		    System.out.println("  </user>");
		}
		
		System.out.println(" </"+getRootName+">");
		
		
	}

}

 

 三、运行结果:

 1.控制台直接输出:

 
 

 

 2.控制台以XML形式输出:

 
 

 四、总结:

 1.使用org.w3c.dom.Node进行解析的,会将你的回车符号也作为一个节点的.

 2.输出字符串里面显示双引号,要在里面加上 "\""

 3.Dom解析Xml,通过根节点,得到根节点下的孩子,然后遍历孩子的List,得到其中一个孩子,在得到该孩子下的所有标签,通过getNodeName(),getTextContent()等方法得到具体的信息.

   

猜你喜欢

转载自cb123456.iteye.com/blog/2215067