DOM4J:
package GaoJiTexing.chapter6;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test; //做单元测试
public class Dom4jTest {
@Test//注解
public void readXMLDemo() throws Exception {
//创建saxReader对象
SAXReader reader = new SAXReader();
///
//3种方式加载xml文件的方式:
//1 通过read方法读取一个文件 转换成Document对象
// Document document = reader.read(new File("src/GaoJiTexing/chapter6/user.xml"));
Document document = reader.read(new File("src/GaoJiTexing/chapter6/car.xml"));
//Document document = reader.read(new File("src/car.xml"));
//2 根据文件名用类加载器取得路径
// String path = this.getClass().getClassLoader()
// .getResource("src/GaoJiTexing/chapter6/user.xml").getPath();
// System.out.println(path);
//Document document = reader.read(new File(path));
//3 根据文件名用类加载器取得文件流
// InputStream is = this.getClass().getClassLoader().getResourceAsStream("user.xml");
// Document document = reader.read(is);
///
//获取根节点元素对象
Element node = document.getRootElement();
//遍历所有的元素节点
//listNodes(node);
//操作元素---user.xml
//elementMethod(node);
//增加元素---car.xml
//addXMLNodeDemo(node);
//删除元素---car.xml
removeXMLNodeDemo(node);
// int i = 10 + 10;
// assertEquals(i, 20);
}
//增加元素
public void addXMLNodeDemo(Element node) throws Exception {
Element supercarElement= node.addElement("supercars")
.addAttribute("company", "宝驹");
supercarElement.addElement("carname")
.addAttribute("type", "宝驹 101")
.addText("宝驹 101");
supercarElement.addElement("carname")
.addAttribute("type", "sports")
.addText("宝驹 202");
writer(node.getDocument());
}
//删除元素
public void removeXMLNodeDemo(Element node) throws Exception {
Iterator<Element> supercarElement= node.elementIterator();
for(;supercarElement.hasNext();) {
Element e = supercarElement.next();
if(e.attribute("company").getValue().equals("宝驹")) {
node.remove(e);
}
}
writer(node.getDocument());
}
/**
* 遍历当前节点元素下面的所有(元素的)子节点
*
* @param node
*/
public void listNodes(Element node) {
System.out.println("当前节点的名称:" + node.getName());
// 获取当前节点的所有属性节点
List<Attribute> list = node.attributes();
// 遍历属性节点
System.out.println("节点的属性:");
for (Attribute attr : list) {
System.out.println(attr.getName()
+ "---" + attr.getValue());
}
//取出文本内容
if (!node.getTextTrim().equals("")) {
System.out.println("文本内容:" + node.getText());
}
// 当前节点下面子节点迭代器
Iterator<Element> it = node.elementIterator();
// 遍历
while (it.hasNext()) {
// 获取某个子节点对象
Element e = it.next();
// 对子节点进行遍历
listNodes(e);
}
}
/**
* 介绍Element元素(节点)对象的方法
*
*
Element.getName();//标签名(元素名)
Element.attributes();//标签全部属性
Element.attribute("").getValue();//标签属性值
Element.getText();//标签数据
Element.element("name");//获取第一个名为name子节点
Element.elements("tel");//获取元素的所有名为tel的子节点
Element.elements();//获取元素的所有子节点
* @param node
*/
public void elementMethod(Element node) {
// 获取node节点中,子节点的元素名称为user的元素节点。
Element e = node.element("user");
// 获取users元素节点中,子节点为name的元素节点(只能获取第一个name元素节点)
Element userName = e.element("name");
System.out.println(e.getName() + "----" + userName.getText());
// 获取user这个元素节点 中,所有子节点名称为tel元素的节点 。
List<Element> tels = e.elements("tel");
for (Element tel : tels) {
System.out.println(tel.getText());
}
System.out.println("----------------------------");
// 获取user这个元素节点 所有元素的子节点。
List<Element> elements = e.elements();
for (Element el : elements) {
System.out.println(el.getName() + ":" + el.getText());
}
//一级一级取元素
// Element element = node.element("user").element("name");
// System.out.println(element.getName()+ ":" +element.getText());
}
//创建xml文档
//@Test
public void createXMLDemo() throws Exception {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("cars");
Element supercarElement= root.addElement("supercars")
.addAttribute("company", "Ferrai");
supercarElement.addElement("carname")
.addAttribute("type", "Ferrari 101")
.addText("Ferrari 101");
supercarElement.addElement("carname")
.addAttribute("type", "sports")
.addText("Ferrari 202");
// 将document对象写入到一个XML文件中
writer(document);
}
/**
* 把document对象写入新的文件
*
* @param document
* @throws Exception
*/
public void writer(Document document) throws Exception {
// 紧凑的格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 排版缩进的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码
format.setEncoding("GBK");
// 创建XMLWriter对象,指定了写出文件及编码格式
XMLWriter writer = new XMLWriter(
new FileWriter(new File("src/GaoJiTexing/chapter6/car.xml")),format);
// 写入
writer.write(document);
// 立即写入
writer.flush();
// 关闭操作
writer.close();
}
}
网络编程:
网络编程
作用:可以通过网络编程方式让两台电脑,或多台电脑之间直接通信(传数据)
实际应用:
比如即时聊天程序QQ就是用网络编程实现的。
网络游戏等
学习重点是web系统,基于互联网
其实web系统中的web服务器和浏览器之间传输数据使用的是HTTP协议,
但它的低层实现仍然是TCP/IP,UDP协议,就是用网络编程实现的。
web系统的通信是指:浏览器与web服务器之的通信
网络编程主要是使用TCP/IP,UDP协议来编程,是较低层的编程。
它与web开发是完全不同的。WEB开发是利用高层协议(HTTP)来实
现通信的.web程序的底层通信是由WEB服务器完成的。
WEB服务器还是使用TCP/IP协议来实现通信的。
网络编程主要是用两种协议来实现,一个是TCP,IP(路由),一个是UDP
TCP特点:有连接,有确认,可靠,可保证到达,但效率较低。
相当于打电话.
UDP特点:无需先创建好连接,无确认机制,不可靠,无顺序,但效率高。
相当于发短信。