一.知识点
* 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 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类型的对象
IteratorlibraryIterator = 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());
//创建子标签的迭代器对象
IteratorbookIterator = 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);
}
}