JavaSE基础之 XML(可扩展标记语言)
一.知识点
* xml 数据
* xml 是一种国际通用的数据格式
* 最大优点 跨平台
*
* xml 是一种 标记型语言 标签<></> 标签都是 成对 出现
*
* 了解xml数据格式
* 如何利用java代码生成xml数据
* 如何使用xml数据(解析)
* 解析: 将数据提取出来的过程
*
* jar包: dom4j-1.6.1.jar
* 如何导入jar包:
* 1.先创建一个文件夹 用于存放jar包
* 2.在工程根目录下创建libs文件夹 点击根目录右键 new-->Directory-->取名libs
* 3.将jar包复制粘贴到libs 文件夹中
* 4.选中jar包右键-->Add as library —>确定(出现小三角则成功)
*创建XML文档
//第一步 创建document(文档)对象
Document document = DocumentHelper.createDocument();
//第二步 创建根标签 所有标签的类型都是Element
Element root = DocumentHelper.createElement("root");
//将根标签放入document对象
document.setRootElement(root);
//可以为标签添加属性
//参数1 属性名 参数2 属性值
root.addAttribute("desc","这是一个根标签");
//创建子标签
Element traffic =root.addElement("traffic");
//在子标签中再添加子标签
Element brand = traffic.addElement("brand");
//为子标签添加内容
brand.setText("lambo");
Element price = traffic.addElement("price");
price.setText("600万元");
Element color = traffic.addElement("color");
color.setText("宝石蓝");
/*--------------------生成xml文件-------------------------*/
//首先创建一个文件
//文件路径一定确保正确
File file = new File("xml_file/newXml.xml");
try {
FileOutputStream fos = new FileOutputStream(file);
//对生成的xml文件进行处理
OutputFormat format = new OutputFormat();
//换行
format.setNewlines(true);
//设置编码格式
format.setEncoding("utf-8");
//设置缩进 两个tab
format.setIndent(" ");
//!!!最最最核心代码 编写file
XMLWriter writer = new XMLWriter(fos,format);
writer.write(document);
//注意最后的操作 关闭流
writer.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
*XML文档解析
* 解析:
* 将某种数据格式里面的内容提取出来
* 转化为我们可以使用的格式
//首先创建一个集合(或Map) 存放解析好的对象(数据) List<Book> books = new ArrayList<>(); //找到要解析的文件 File file = new File("xml_file/newXml3.xml"); //SAX解析方式 创建解析用的对象 SAXReader reader =new SAXReader(); try { //读文件获取document对象 Document document = reader.read(file); //解析原则 从外向里一层一层解析 //获取根标签 Element library = document.getRootElement(); //getName 是获取标签的名字 //System.out.println("根标签的名字是: " + library.getName()); //attribute("desc").getData() 获取标签里的属性内容 //System.out.println(library.attribute("desc").getData()); //迭代器遍历!!!! //创建迭代器对象 都是Element类型的对象 Iterator<Element> libraryIterator = library.elementIterator(); //while循环 while (libraryIterator.hasNext()) { //用于存放遍历以后的结果 Book book = new Book(); //获取子标签 Element bookElement =libraryIterator.next(); //获取子标签的名字 //System.out.println(bookElement.getName()); //获取子标签里面属性内容 key值 //System.out.println(bookElement.attribute("type").getData()); //创建子标签的迭代器对象 Iterator<Element> bookIterator = bookElement.elementIterator(); while (bookIterator.hasNext()) { //获取孙子标签 Element element = bookIterator.next(); // System.out.println(element.getName()); // System.out.println(element.getData()); //判断子标签的名字 if (element.getName().equals("name")){ //获取对应子标签的内容 String name = element.getText(); // System.out.println(name); //将内容设置给book对象进行储存 book.setName(name); } if (element.getName().equals("kind")){ String kind = element.getText(); book.setKind(kind); } if (element.getName().equals("price")){ String price = element.getText(); book.setPrice(price); } if (element.getName().equals("num")){ String num = element.getText(); book.setNum(num); } } books.add(book); } } catch (DocumentException e) { e.printStackTrace(); } for (Book book : books) { System.out.println(book); } }