//user.home:用户主目录
//os.name:操作系统名称
//file.separator 文件目录分隔符的符号,例如'd:\test\test.java'。 对于 Windows,默认值为 '\',对于 Unix / Mac,默认值为'/' 。
//user.dir:当前用户程序所在目录
String userHome = System.getProperty("user.home");
String osName = System.getProperty("os.name");
String fileSeparator = System.getProperty("file.separator");
String userDir = System.getProperty("user.dir");
/*
操作系统的名称:Windows 11
用户的主目录:C:\Users\lds
文件目录分隔符的符号:\
用户的当前工作目录:D:\java84\xml_parse
*/
System.out.println("操作系统的名称:" + osName);
System.out.println("用户的主目录:" + userHome);
System.out.println("文件目录分隔符的符号:" + fileSeparator);
System.out.println("用户的当前工作目录:" + userDir);
System.out.println("---------------------华丽分割线---------------------------");
//电影xml文件绝对物理路径
//File filmPath = new File(userDir,"doc" + File.separator + "movies.xml");
String filmPath = userDir + File.separator + "doc" + File.separator + "movies.xml";
//创建文件对象,并关联上物理
File filmFile = new File(filmPath);
//创建xml读取器对象
SAXReader reader = new SAXReader();//依赖dom4j.jar包
try {
//将movies.xml文件加载到内存中,并返回文档对象(Document接口引用doc在内存中表示一个XML文件)
Document doc = reader.read(filmFile);
//获取movies.xml文件的根节点对象,Element接口引用表示单个元素节点对象
Element root = doc.getRootElement();
//获取根节点的名称
String rootName = root.getName();
System.out.println("根节点名称:" + rootName);
//获取根节点下的所有子节点(movie子节点)
List<Element> movieList = root.elements("movie");
//循环遍历movie节点
movieList.forEach(m->{
//Attribute接口引用表示某个元素的单属性节点对象
//Attribute attrId = m.attribute("id");
//String id = attrId.getValue();
//获取id编号
String id = m.attributeValue("id");
//根据当前节点对象.elementTextTrim("子节点名称");
String name = m.elementTextTrim("name");
String type = m.elementTextTrim("type");
String period = m.elementTextTrim("period");
String price = m.elementTextTrim("price");
String releaseDate = m.elementTextTrim("releaseDate");
String director = m.elementTextTrim("director");
System.out.println("电影编号:" + id);
System.out.println("电影名字:" + name);
System.out.println("电影剧情:" + type);
System.out.println("电影片长:" + period);
System.out.println("电影售价:" + price);
System.out.println("电影上映日期:" + releaseDate);
System.out.println("电影导演:" + director);
System.out.println("----------------华丽分割线--------------------");
// 第二种方法:使用循环迭代器 获取根节点下的所有子节点
/*Iterator<Element> it = m.elementIterator();
while (it.hasNext()) {
Element ele = it.next();
switch (ele.getName()) {
case "name" -> {
String name = ele.getTextTrim();
System.out.println("电影名:" + name);
}
case "type" -> {
String type = ele.getTextTrim();
System.out.println("电影类型:" + type);
}
}
}*/
});
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}