JavaSE_day49-50(XML,DTD约束,schema约束,解析XML,DOM实现解析XML文件)

注意:学习下面内容需要参考那个文档w3cschool(学习Java资源),Gitee上传!

1 Xml格式:






	
        zhangsan
        18
        
    
	
	





	
		zhangsan
		
			www.itheima.com
				www.itcast.cn
			]]>
		
	
	
	
	
		zhangsan
		
			<itheima>www.itheima.com</itheima>
		
	

2.DTD约束格式:

  
   
	  
	  
	
	


<书架>
	<书>
		<书名>书名
		<作者>作业
		<售价>售价	
	

3 schema约束:

 

	
		
			
				
					
						
							
							
							
						
					
				
			
		
	


<书架>
	xmlns:jinling="http://www.jinlingit.com"
	xmlns:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:xsi:schemaLocation="http://www.jinlingit.com book.xsd">
	
	<书>
		<书名>
		<作者>
		<售价>
	

4 解析XML文件(重点!!)



 
   
    郑州  
    高新区 
    
  三门峡  
  洛阳  
  信阳  
  南阳  
  南阳1  
  南阳啊啊 

JavaSE_day49-50(XML,DTD约束,schema约束,解析XML,DOM实现解析XML文件)_第1张图片

 以下是Dom方式解析:(sax暂时不掌握)

package day49_day50;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/*
 * Dom4J的常用方法:
 * 		Document:
 * 			 Element	getRootElement() :获取根元素对象(根标签)
 * 		Element:
 * 			 List	elements() :获取所有的子元素
 * 		     List	elements(String name)  :根据指定的元素名称来获取相应的所有的子元素
 * 			 Element	element(String name) :根据指定的元素名称来获取子元素对象
 * 			 String	elementText(String name) :根据指定的元素名称,来获取子元素中的文本
 * 		     String	getText() :获取当前元素对象的文本
 * 			 void	setData(Object data):设置当前元素对象
 * 			 String	attributeValue(String name) : 根据指定的属性名称获取其对应的值
 * 			  
 * 
 * 
 * */

public class C_Dom4jDemo {

	public static void main(String[] args) throws Exception {
		//1.根据子元素的名称(属性)来获取子元素的文本
		// method1();

		//2.得到子标签的内容,如果标签内套有标签,那么是输出空内容
//		method2();

		// 3,修改某一个元素节点的主体内容:信阳----安阳
//		method3();
		
		// 4,向指定元素节点中增加子元素节点: 增加一个新城市 : 南阳  这个会加在最后的位置
//		method5();
		
		// 5,向指定元素节点上增加同级元素节点:在洛阳前面,增加一个三门峡
		
//		method6();
		
		// 6,删除指定元素节点: 删除元素开封
//		method4();
		// 7,操作XML文件属性 打印State的Name
		method7();
		
		// 8,增加属性 : State: GPD:="99999亿"
		method8();
		
	}

	private static void method2() throws Exception {
		// 遍历所有的元素节点,打印他们的元素名称。
		// 先获取根元素
		Document document = C_Dom4JUtils.getDocument();
		Element rootElement = document.getRootElement();

		List elements = rootElement.elements();
		// 得到子标签的内容,如果标签内套有标签,那么是输出空内容!
		for (Element element : elements) {
			System.out.println(element.getText());
		}
	}

	private static void method1() throws Exception {
		// 得到某个具体的节点内容: 打印郑州
		Document document = C_Dom4JUtils.getDocument();
		// 获取根元素state
		Element rootElement = document.getRootElement();
		// 获取根元素下的所有子元素 city...
		List elements = rootElement.elements();

		// 根据索引获取第一个city元素(就是有郑州、高新区那个city)
		Element cityElement = elements.get(0);

		// 根据子元素的名称(属性)来获取子元素的文本
		String text = cityElement.elementText("Region");
		System.out.println(text);
	}

	// 扩展

	private static void method3() throws Exception, IOException {
		// 3、修改某个元素节点的主体内容:信阳-->安阳
		Document document = C_Dom4JUtils.getDocument();
		// 获取根元素
		Element rootElement = document.getRootElement();
		// 获取根元素下的所有子元素
		List es = rootElement.elements();
		// 根据索引可以获取指定的元素
		Element cityElement = es.get(3);
		// 修改文本
		cityElement.setText("安阳");
		// 写回文件
		C_Dom4JUtils.write2XML(document);
	}

	private static void method4() throws Exception, IOException {
		// 6、删除指定元素节点:删除元素开封,在索引2的位置
		Document document = C_Dom4JUtils.getDocument();
		// 获取根元素
		Element rootElement = document.getRootElement();
		// 获取根元素下的所有子元素
		List es = rootElement.elements();
		Element cityElement = es.get(2);
		// 无法自杀,找他爹
		Element parentElement = cityElement.getParent();
		parentElement.remove(cityElement);
		// 写回文件
		C_Dom4JUtils.write2XML(document);
	}

	private static void method5() throws Exception, IOException {
		// 4、向指定元素节点中增加子元素节:添加一个新城市南阳
		Document document = C_Dom4JUtils.getDocument();
		// 获取根元素
		Element rootElement = document.getRootElement();
		// 添加元素
		Element cityElement = rootElement.addElement("ity");// 设置标签
		// 设置文本
		cityElement.setText("南阳啊啊");
		// 写回文件
		C_Dom4JUtils.write2XML(document);
	}

	private static void method6() throws Exception, IOException {
		// 5、向指定元素节点上增加同级元素节点:在洛阳前面,添加一个三门峡
		// 创建一个新的元素对象
		Element cityElement = DocumentHelper.createElement("City");
		// 设置文本
		cityElement.setText("三门峡");

		Document document = C_Dom4JUtils.getDocument();
		// 获取根元素
		Element rootElement = document.getRootElement();
		// 获取根元素下所有的子元素
		List es = rootElement.elements();
		// 将新的元素添加到子元素列表中
		es.add(1, cityElement);//这个1 是索引位置,将1索引位置取代了,所以加在了2索引的上一个标签位置了

		// 写会文件
		C_Dom4JUtils.write2XML(document);
	}

	private static void method7() throws Exception {
		// 7、操作XML文件属性:打印State的Name
		Document document = C_Dom4JUtils.getDocument();
		// 获取根元素
		Element rootElement = document.getRootElement();
		// 获取根元素下所有的子元素
		List es = rootElement.elements();
		
		// 根据属性名称获取值
		String value = rootElement.attributeValue("Name");
		System.out.println(value);
	}

	private static void method8() throws Exception {
		// 7、操作XML文件属性:打印State的Name
		// 8、添加属性:State: GDP="99999亿"
		Document document = C_Dom4JUtils.getDocument();
		// 获取根元素
		Element rootElement = document.getRootElement();
		// 添加新的属性和对应的值
		rootElement.addAttribute("GDP", "99999亿");

		// 写回文件
		C_Dom4JUtils.write2XML(document);
	}

}
package day49_day50;

import java.io.FileOutputStream;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class C_Dom4JUtils {
	
	private C_Dom4JUtils(){}
	
	public static Document getDocument() throws Exception {
		SAXReader reader = new SAXReader();
		Document document = reader.read("src/day49_day50/city.xml");
		return document;
		
	}
	
	public static void write2XML(Document document) throws IOException {
		OutputFormat format = OutputFormat.createPrettyPrint();
		//format.setEncoding("UTF-8");//默认的编码就是UTF-8
		XMLWriter writer = new XMLWriter( new FileOutputStream("src/day49_day50/city.xml"), format );
        writer.write( document );
	}

}

你可能感兴趣的:(Java0基础学习笔记,数学建模)