Java学习第31天-DOM4J、网络编程

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特点:无需先创建好连接,无确认机制,不可靠,无顺序,但效率高。
相当于发短信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值