第四章 可扩展标记语言-XML

XML

        即可扩展标记语言,描述数据及数据间的结构关系

 

XML文档

<?xml version="1.0" encoding="UTF-8"?>

<Students>
	<student>
		<name>张三</name>
		<sex>男</sex>
		<age>21</age>
	</student>
	<student>
		<name>李四</name>
		<sex>男</sex>
		<age>19</age>
	</student>
	<student>
		<name>樱姬</name>
		<sex>女</sex>
		<age>18</age>
	</student>
	
	<student>
		<name>乔峰</name>
		<sex>男</sex>
		<age>19</age>
	</student>
	<student>
		<name>张三丰</name>
		<sex>男</sex>
		<age>78</age>
	</student>
</Students>
<!-- 特殊符号的保存 -->
<?xml version="1.0" encoding="UTF-8"?>

<Teachers>
	<!-- 方式一:转义符 -->
	<teacher>
		<name>王老师</name>
		<sex>男</sex>
		<age>18&gt;age&gt;23</age>
	</teacher>

	<!-- 方式二:特殊符号 -->
	<teacher>
		<name>刘老师</name>
		<sex>女</sex>
		<age><![CDATA[16<age<18]]></age>
	</teacher>
</Teachers>

 

解析xml

        DOM4J:简单的开源库,使用前先下载jar包和添加路径

/*
 * 查找--xml
 */
import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.SAXReader;

public class Search {
	public static void main(String[] args) throws DocumentException {
		// 1.SAXReader实例化
		SAXReader sx = new SAXReader();
		// 2.File对象实例化
		File file = new File("Students.xml");
		// 3.读取文档
		Document doc = sx.read(file);
		// 4.读取根元素
		Element rootEle = doc.getRootElement();
		// 5.读取对象集合
		List<Element> eleList = rootEle.elements("student");
		// 6.遍历
		for (int i = 0; i < eleList.size(); i++) {
			// String name = eleList.get(i).element("name").getText();
			// String sex = eleList.get(i).element("sex").getText();
			// String age = eleList.get(i).element("age").getText();
			
			String name = eleList.get(i).elementText("name");
			String sex = eleList.get(i).elementText("sex");
			String age = eleList.get(i).elementText("age");
			System.out.println(name+"\t"+sex+"\t"+age);
		}
	}
}
/*
 * 增加
 */
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;

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

public class Insert {
	public static void main(String[] args) throws DocumentException, IOException {
		Scanner input  = new Scanner(System.in);
		// 1.创建SAXReader对象
		SAXReader sx = new SAXReader();
		// 2.File对象实例化
		File file = new File("Students.xml");
		// 3.获取文档
		Document doc = sx.read(file);
		// 4.获取根元素
		Element rootEle = doc.getRootElement();
		// 5.添加主标签
		Element student = rootEle.addElement("student");
		// 6.添加子标签
		Element name = student.addElement("name");
		Element sex = student.addElement("sex");
		Element age = student.addElement("age");
		// 7.存值
		System.out.println("请输入姓名:");
		name.setText(input.next());
		System.out.println("请输入性别:");
		sex.setText(input.next());
		System.out.println("请输入年龄:");
		age.setText(input.next());
		// 8.覆盖
		/********************* 方式1 *****************************/

//		FileOutputStream fos = new FileOutputStream("Cars.xml");
//		OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
//		BufferedWriter bw = new BufferedWriter(osw);
//		doc.write(bw);
//		bw.flush();
//		bw.close();

		/********************* 方式2 *****************************/
		OutputFormat opf = OutputFormat.createPrettyPrint();

		FileOutputStream fos = new FileOutputStream("Students.xml");
		XMLWriter xml = new XMLWriter(fos, opf);
		xml.write(doc);
		xml.close();
	}
}
/*
 * 修改
 */
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Update {
	public static void main(String[] args) throws Exception {
		Scanner input = new Scanner(System.in);
		// 1.SAXReader对象实例化
		SAXReader sx = new SAXReader();
		// 2.File对象实例化
		File file = new File(".\\Students.xml");
		// 3.获取文档
		Document doc  = sx.read(file);
		// 4.获取根元素
		Element rootEle = doc.getRootElement();
		// 5.获取对象集合
		List<Element> eleList = rootEle.elements("student");
		// 6.查找修改的元素
		System.out.println("请输入要修改的姓名:");
		String name = input.next();
		for (Element element : eleList) {
			if(element.elementText("name").equalsIgnoreCase(name)){
				System.out.println("请输入性别:");
				String sex = input.next();
				System.out.println("请输入年龄:");
				String age = input.next();
				
				Element sexT = element.element("sex");
				Element ageT = element.element("age");	
				// 7.修改
				sexT.setText(sex);
				ageT.setText(age);
				break;
			}
		}
		
		// 8.覆盖
		XMLWriter xml = new XMLWriter(new FileOutputStream("Students.xml"));
		xml.write(doc);
		xml.close();
	}
}
/*
 * 删除
 */
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Delete {
	public static void main(String[] args) throws Exception {
		Scanner input  = new Scanner(System.in);
		// 1.SAXReader对象实例化
		SAXReader sx = new SAXReader();
		// 2.File对象实例化
		File file = new File("Students.xml");
		// 3.获取文档
		Document doc = sx.read(file);
		// 4.获取根元素
		Element rootEle = doc.getRootElement();
		// 5.获取对象集合
		List<Element> eleList = rootEle.elements();
		// 6.查找
		System.out.println("请输入你要删除的姓名:");
		String name = input.next();
		for (Element element : eleList) {
			if(element.elementText("name").equalsIgnoreCase(name)){
				// 7.删除
				rootEle.remove(element);
				break;
			}
		}
		// 8.覆盖
		FileOutputStream fos = new FileOutputStream("Students.xml");
		XMLWriter xml = new XMLWriter(fos);
		xml.write(doc);
		xml.close();
	}
}

 

        DOM:文档对象是一颗倒挂的DOM树

                  在DOM模型中,每个节点(Node)都有一系列子节点(ChildNode),每个子节点都有唯一的父节点(ParentNode)。节点又可分为元素节点(element  node)和文本节点(text  node),元素节点可以包含属性(attribute)

import java.io.FileOutputStream;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

/*
 * 增加
 */
public class Insert {
	public static void main(String[] args) throws Exception {
		Scanner input = new Scanner(System.in);
		// 1.获取文档解析工厂
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// 2.获取文档解析器
		DocumentBuilder db = dbf.newDocumentBuilder();
		// 3.解析文件获取文档
		Document doc = db.parse(".\\Students.xml");
		// 4.获取根(文档)元素
		Element rootEle = doc.getDocumentElement();
		// 5.在目录中创建标签
		Element student = doc.createElement("student");
		Element name = doc.createElement("name");
		Element sex = doc.createElement("sex");
		Element age = doc.createElement("age");

		// 5.1赋值
		System.out.println("请输入姓名:");
		name.setTextContent(input.next());
		System.out.println("请输入性别:");
		sex.setTextContent(input.next());
		System.out.println("请输入年龄:");
		age.setTextContent(input.next());
		// 6.插入位置
		student.appendChild(name);
		student.appendChild(sex);
		student.appendChild(age);
		rootEle.appendChild(student);
		// 7.替换
		// 7.1转换器工厂
		TransformerFactory factory = TransformerFactory.newInstance();
		// 7.2转换器对象
		Transformer transformer = factory.newTransformer();
		transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");

		StreamResult result = new StreamResult(new FileOutputStream(
				"Students.xml"));

		DOMSource source = new DOMSource(doc);
		transformer.transform(source, result);
	}
}
import java.io.FileOutputStream;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/*
 *	删除 
 */
public class Delete {
	public static void main(String[] args) throws Exception {
		Scanner input = new Scanner(System.in);
		// 1.获取文档解析器工厂
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// 2.获取文档解析器
		DocumentBuilder db = dbf.newDocumentBuilder();
		// 3.解析文件获取目录
		Document doc = db.parse(".\\Students.xml");
		// 4.获取根元素
		Element rootEle = doc.getDocumentElement();
		// 5.获取全部标签
		NodeList name = rootEle.getElementsByTagName("name");
		// 6.查找
		System.out.println("请输入你要删除的姓名:");
		String nName = input.next();
		for (int i = 0; i < name.getLength(); i++) {
			if (name.item(i).getTextContent().equalsIgnoreCase(nName)) {
				// 7.由父删子
				Node parent = name.item(i).getParentNode();
				Node grandParent = parent.getParentNode();
				grandParent.removeChild(parent);
			}
		}
		// 8.替换
		// 8.1转换器工厂
		TransformerFactory factory = TransformerFactory.newInstance();
		// 8.2转换器对象
		Transformer transformer = factory.newTransformer();
		transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
		StreamResult result = new StreamResult(new FileOutputStream("Students.xml"));
		DOMSource source = new DOMSource(doc);
		transformer.transform(source, result);
	}
}
import java.io.File;
import java.io.FileOutputStream;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/*
 * 修改
 */
public class Update {
	public static void main(String[] args) throws Exception {
		Scanner input = new Scanner(System.in);
		// 1.获取文档解析器工厂
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// 2.获取文档解析器
		DocumentBuilder db = dbf.newDocumentBuilder();
		// 3.解析文件获取文档
		Document doc = db.parse(new File(".\\Students.xml"));
		// 4.获取根元素
		Element rootEle = doc.getDocumentElement();
		// 5.获取全部标签
		NodeList name = rootEle.getElementsByTagName("name");
		NodeList sex = rootEle.getElementsByTagName("sex");
		NodeList age = rootEle.getElementsByTagName("age");
		// 6.查找
		System.out.println("请输入你要修改的名字:");
		String nName = input.next();
		for (int i = 0; i < name.getLength(); i++) {
			if (name.item(i).getTextContent().equalsIgnoreCase(nName)) {
				// 7.修改对应标签
				System.out.println("请输入性别:");
				sex.item(i).setTextContent(input.next());
				System.out.println("请输入年龄:");
				age.item(i).setTextContent(input.next());
				break;
			}
		}

		// 8.替换
		// 8.1转换器工厂
		TransformerFactory factory = TransformerFactory.newInstance();
		// 8.2转换器对象
		Transformer transformer = factory.newTransformer();
		transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");

		StreamResult result = new StreamResult(new FileOutputStream(
				"Students.xml"));

		DOMSource source = new DOMSource(doc);
		transformer.transform(source, result);
	}
}
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.NodeList;

/*
 * 查找
 */
public class Search {
	public static void main(String[] args) throws Exception {
		// 1.获取文档解析器工厂
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// 2.获取文档解析器
		DocumentBuilder db = dbf.newDocumentBuilder();
		// 3.解析文件获取文档
		Document doc = db.parse(".\\Students.xml");
		// 4.获取根元素
		Element rootEle = doc.getDocumentElement();
		// 5.根据名字获取全部标签
		NodeList  name = rootEle.getElementsByTagName("name");
		NodeList  sex = rootEle.getElementsByTagName("sex");
		NodeList  age = rootEle.getElementsByTagName("age");
		// 6.遍历
		for (int i = 0; i < name.getLength(); i++) {
			String tName = name.item(i).getTextContent();
			String tSex = sex.item(i).getTextContent();
			String tAge = age.item(i).getTextContent();
			System.out.println(tName+"\t"+tSex+"\t"+tAge);
		}
		
	}
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值