zoukankan      html  css  js  c++  java
  • Dom解析XML文件具体用法

    public class Dom4j
    {
    	public static void main(String[] args) throws Exception
    	{
    		List<Student> list = parseXml();
    		for (Student s : list)
    		{
    			System.out
    					.println(s.getId() + ":" + s.getName() + ":" + s.getAge());
    		}
    	}
    
    	public static List<Student> parseXml() throws Exception
    	{
    		// 定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器。
    		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    
    		// 定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document。
    		// 此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取。
    		// 获取此类的实例之后,将可以从各种输入源解析 XML。这些输入源有 InputStreams、Files、URL 和 SAX
    		// InputSources。
    		// 注意,此类重用了 SAX API 中的一些类。这并不要求底层 DOM 实现的实现者使用 SAX 解析器将 XML 文档解析为
    		// Document。
    		// 它仅要求该实现使用这些现有的 API 与应用程序交流。
    		DocumentBuilder db = dbf.newDocumentBuilder();
    
    		// Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
    		// 因为元素、文本节点、注释、处理指令等不能存在于 Document 的上下文之外,所以 Document
    		// 接口还包含所需的创建这些对象的工厂方法。
    		// 所创建的 Node 对象具有 ownerDocument 属性,该属性将 Node 对象与创建这些对象时的上下文所属的 Document
    		// 关联起来
    		Document doc = db.parse("C:/Users/xmc/Desktop/student.xml");
    
    		// XPathFactory 实例可用于创建 XPath 对象
    		XPathFactory xFactory = XPathFactory.newInstance();
    
    		// XPath 提供了对 XPath 计算环境和表达式的访问。
    		// 如果在没有上下文项的情况下请求计算表达式,则将使用一个空文档节点作为上下文。
    		// 为计算 XPath 表达式,应将 DocumentFragment 视为 Document 节点。
    		// 如果表达式包含变量引用,则其值将通过 XPathVariableResolver 找到,
    		// 其中 XPathVariableResolver 是通过
    		// setXPathVariableResolver(XPathVariableResolver resolver) 设置的。
    		// 如果变量解析器未定义或解析器对变量返回 null,则引发 XPathExpressionException。
    		// 在任何单个计算过程中,变量的值必须是不可变的。
    		XPath path = xFactory.newXPath();
    
    		// NodeList 接口提供对节点的有序集合的抽象,没有定义或约束如何实现此集合。DOM 中的 NodeList 对象是活动的。
    		// NodeList 中的项可以通过从 0 开始的整数索引进行访问。
    		NodeList nodes = (NodeList) path.evaluate("/students/student", doc,
    				XPathConstants.NODESET);
    
    		// 创建一个Student集合用于存放反序列化之后的每个Student节点构成的Student对象
    		List<Student> list = new ArrayList<Student>();
    
    		// 从NodeList集合中挨个取出元素转换成Student对象存入Student集合中
    		for (int i = 0; i < nodes.getLength(); i++)
    		{
    			Node node = nodes.item(i);
    			list.add(nodeToStudent(node));
    		}
    		return list;
    	}
    
    	/**
    	 *将XML中的一个Student节点转换成Student对象
    	 */
    	public static Student nodeToStudent(Node node)
    	{
    		XPathFactory xPathFactory = XPathFactory.newInstance();
    		XPath xPath = xPathFactory.newXPath();
    		Student s = new Student();
    		Double id = null;
    		String name = null;
    		Double age = null;
    		try
    		{
    			id = (Double) xPath.evaluate("id", node, XPathConstants.NUMBER);
    			name = (String) xPath.evaluate("name", node, XPathConstants.STRING);
    			age = (Double) xPath.evaluate("age", node, XPathConstants.NUMBER);
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    		s.setId(id.intValue());
    		s.setName(name);
    		s.setAge(age.intValue());
    		return s;
    	}
    }
    /**
     * @author xmc 
     * Student实体,与XML中的节点对应
     */
    class Student
    {
    	private int id;
    	private String name;
    	private int age;
    
    	public int getId()
    	{
    		return id;
    	}
    
    	public void setId(int id)
    	{
    		this.id = id;
    	}
    
    	public String getName()
    	{
    		return name;
    	}
    
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    
    	public int getAge()
    	{
    		return age;
    	}
    
    	public void setAge(int age)
    	{
    		this.age = age;
    	}
    
    }



  • 相关阅读:
    js自定义事件
    js回调函数
    git和github使用
    23种设计模式(10):命令模式
    HBase查询引擎——Phoenix的使用
    八、shell的管道
    七、Linux的shell的重定向
    五、Linux的常用命令 和 使用方式 1
    十二、TestNG分组测试2
    十一、TestNG依赖测试
  • 原文地址:https://www.cnblogs.com/xmc0551/p/5645574.html
Copyright © 2011-2022 走看看