1. xml
      概念:Extensible Markup Language 可扩展标记语言
      可扩展:标签都是自定义的。
      功能
      存储数据
      1. 配置文件
      2. 在网络中传输
      xml与html的区别
      xml标签都是自定义的,html标签是预定义。
      xml的语法严格,html语法松散
      xml是存储数据的,html是展示数据

    基本语法:
    xml文档的后缀名 .xml
    xml第一行必须定义为文档声明
    xml文档中有且仅有一个根标签
    属性值必须使用引号(单双都可)引起来
    标签必须正确关闭
    xml标签名称区分大小写
    简单实例
    <?xml version=’1.0’ ?>


    zhangsan
    23
    male




    lisi
    24
    female


    组成部分:
    文档声明
    格式:
    属性列表:
    version:版本号,必须的属性
    encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
    standalone:是否独立
    取值:
    yes:不依赖其他文件
    no:依赖其他文件
    标签:标签名称自定义的
    规则:
    名称可以包含字母、数字以及其他的字符
    名称不能以数字或者标点符号开始
    名称不能以字母 xml(或者 XML、Xml 等等)开始
    名称不能包含空格
    属性:
    id属性值唯一
    文本:
    CDATA区:在该区域中的数据会被原样展示
    格式:
    2. xml解析与写入
    xml常见的解析器:
    1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
    2. DOM4J:一款非常优秀的解析器
    3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
    4. PULL:Android操作系统内置的解析器,sax方式的。
    使用dom4j解析xml
    xml文件如下
    <?xml version=’1.0’ ?>


    zhangsan
    23
    male




    lisi
    24
    female


    解析xml
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import java.io.File;
    import java.util.List;
    public class XmlDemo {
    public static void main(String[] args) throws DocumentException {
    //获取文档对象
    SAXReader reader = new SAXReader();
    Document doc = reader.read(new File(“user.xml”));
    //获取根元素
    Element root = doc.getRootElement();
    System.out.println(“获取到的根元素” + root);
    //获取所有的子元素Love
    List users = root.elements(“user”);
    //输入name元素的内容
    for (Element element : users) {
    System.out.println(“获取id属性:” + element.attribute(“id”).getValue());
    System.out.println(“获取name:” + element.elementTextTrim(“name”));
    System.out.println(“获取age:” + element.elementTextTrim(“age”));
    System.out.println(“获取gender:” + element.elementTextTrim(“gender”));
    System.out.println(“———————-“);
    }
    }
    }
    image.png
    使用XPath快速查找
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;
    import java.io.File;
    import java.util.List;
    public class XmlDemo {
    public static void main(String[] args) throws DocumentException {
    //获取文档对象
    SAXReader reader = new SAXReader();
    Document doc = reader.read(new File(“user.xml”));
    List list = doc.selectNodes(“//user”);
    for (Node node : list) {
    System.out.println(node.valueOf(“name”));
    }
    System.out.println(“——————“);
    Node node = doc.selectSingleNode(“//user”);
    String id = node.valueOf(“@id”);
    System.out.println(id);
    System.out.println(“——————“);
    Node node2 = doc.selectSingleNode(“//user[@id=’2’]”);
    String name = node.valueOf(“name”);
    System.out.println(name);
    }
    }
    image.png
    创建一个新的XML文档并写入本地
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class XmlDemo {
    public static void main(String[] args) throws IOException {
    Document document = DocumentHelper.createDocument();
    Element root = document.addElement(“root”);
    Element author1 = root.addElement(“author”)
    .addAttribute(“name”, “James”)
    .addAttribute(“location”, “UK”)
    .addText(“James Strachan”);
    Element author2 = root.addElement(“author”)
    .addAttribute(“name”, “Bob”)
    .addAttribute(“location”, “US”)
    .addText(“Bob McWhirter”);
    //设置写入xml为格式化的xml
    OutputFormat format = OutputFormat.createPrettyPrint();
    //设置写入的xml为压缩的xml
    //OutputFormat format = OutputFormat.createCompactFormat();
    XMLWriter writer = new XMLWriter(new FileOutputStream(“new.xml”), format);
    writer.write(document);
    writer.close();
    }
    }
    image.png
    遍历迭代xml
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    public class XmlDemo {
    public static void main(String[] args) throws DocumentException {
    //获取文档对象
    SAXReader reader = new SAXReader();
    Document document = reader.read(new File(“user.xml”));
    Element root = document.getRootElement();
    // iterate through child elements of root
    for (Iterator it = root.elementIterator(); it.hasNext(); ) {
    Element element = it.next();
    // do something
    System.out.println(element.elementTextTrim(“name”));
    }
    System.out.println(“————————“);
    // iterate through child elements of root with element name “foo”
    for (Iterator it = root.elementIterator(“user”); it.hasNext(); ) {
    Element user = it.next();
    System.out.println(user.elementTextTrim(“age”));
    }
    System.out.println(“————————“);
    // iterate through attributes of root
    for (Iterator it = root.attributeIterator(); it.hasNext(); ) {
    Attribute attribute = it.next();
    // do something
    System.out.println(attribute.getValue());
    }
    }
    }