JAVA中解析XML和书写XML
一.解析XML
1.解析user.xml文档
解析user.xml文档,使用DOM4J解析XML,将User.xml文档解析后的所有员工入对象中,将对象在存储到集合中。
1.创建自定义User类
属性包括:id(序号),name(姓名),age(年龄),salay(薪资),gender(性别)
public class User {
private int id;
private String name;
private int age;
private double salay;
private char gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalay() {
return salay;
}
public void setSalay(double salay) {
this.salay = salay;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(int id, String name, int age, double salay, char gender) {
super();
this.id = id;
this.name = name;
this.age = age;
this.salay = salay;
this.gender = gender;
}
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", salay=" + salay + ", gender=" + gender + "]";
}
}
2.创建一个XML文件,写入user信息
<?xml version="1.0" encoding="UTF-8"?>
<list><!--根元素-->
<user id="1">
<name>刘永超</name>
<age>18</age>
<salay>50000</salay>
<gender>男</gender>
</user>
<user id="2">
<name>张飞</name>
<age>19</age>
<salay>50000</salay>
<gender>男</gender>
</user>
<user id="3">
<name>关羽</name>
<age>20</age>
<salay>50002</salay>
<gender>女</gender>
</user>
</list>
3.解析写好XML文件
1.创建SAXReader;
2.使用SAXReader读取xml文档并生成DOM(Document)对象;
3.通过DOM对象获取根元素;
4.通过根元素开始逐级获取子元素,达到遍历XML文档数据的目的;
public class ParseUserXml {
public static void main(String[] args) {
try {
List<User> list=new ArrayList<User>();
//1.创建SAXReader
SAXReader reader=new SAXReader();
//SAXReader提供了read()方法来读取xml文档返回一个DOM(Document)实例
File file=new File("src/day15/User.xml");
//2.使用SAXReader读取xml文档并申成DOM(Document)对象
Document doc=reader.read(file);
//3.通过DOM对象获取根元素
//3.1 DOM(Document)提供了获取根元素得分方法getRootElement()返回一个Element
Element root=doc.getRootElement();
//3.2 获取根标签下的所有子标签Element提供了获取所有子标签的方法elements()返回list集合
List<Element> es=root.elements();
//System.out.println(es.size());
//3.3 遍历集合 ,通过每一个子标签获取员工信息
for(Element e:es){
//获取<name>标签
//Element nameEel=e.element("name");
//再获取<name>标签中的文本
//String name=nameEel.getText();
//获取标签中的文本
//获取员工名字
String name=e.elementText("name");
//System.out.println(name);
//获取员工的年龄
int age=Integer.parseInt(e.elementText("age"));
//获取员工薪资
double salay=Double.parseDouble(e.elementText("salay"));
//获取员工性别
char gender=e.elementText("gender").charAt(0);
//System.out.println(name+","+age+","+salay+","+gender);
//获取id
Attribute att=e.attribute("id");
//通过使用Attribute提供了一个获取id的方法getValue()返回字符串
int id=Integer.parseInt(att.getValue());
//解析完毕后将解析后的数据存入到User对象中
User user=new User(id, name, age, salay, gender);
//System.out.println(user);
list.add(user);
}
System.out.println(list.size());
System.out.println(list);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4.执行结果
3
[User [id=1, name=刘永超, age=18, salay=50000.0, gender=男], User [id=2, name=张飞, age=19, salay=50000.0, gender=男], User [id=3, name=关羽, age=20, salay=50002.0, gender=女]]
5.结果分析
通过解析User.xml这个文件,我们获取到了xml中所有标签中的信息,并将信息存入User对象中,然后成功的将user对象存放到list集合中,达到了我们的目的。
2.解析web.xml文档中的所有 mime-mapping
1.web.xml文件
2.解析web.xml文档
文件内类似于以下形式:
思路如下:
1.解析web.xml文档中的所有
2.在标签中获取子标签,
3.然后将标签中的内容添加到Map集合中的key
4. 标签中的内容添加到Map集合中的value
public class ParseWebXml {
public static void main(String[] args) {
try {
Map<String, String> map=new HashMap<String, String>();
//1.创建SAXReader对象
SAXReader reader=new SAXReader();
//2.获取DOM对象
File file=new File("src/day15/web.xml");
Document doc = reader.read(file);
//3.获取根标签
Element root=doc.getRootElement();
//4.获取根标签下的指定子标签
List<Element> elements=root.elements("mime-mapping");
//遍历elements获取每一个子标签中的文本内容
for(Element e:elements){
String extension=e.elementText("extension");
String mimetype=e.elementText("mime-type");
map.put(extension,mimetype);
}
System.out.println(elements.size());
//System.out.println("map集合为:"+map);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.执行结果
1010
备注:因为map中存放的元素过多,在这里并没有输出,只输出了map集合的大小。
二.书写XML
使用DOM生成一个XML文档
生成一个XMl文档的步骤:
1.创建Document对象,表示一个空白文档,在这里有个类是DocumentHelper,提供了一个静态方法createDocument()返回一个Document实例
2.向Document中添加标签。
3.根据标签逐级添加子标签达到XML文档应有的树状结构。
4.将该结构写出去,需要创建XMLWriter并生成XML文档。
1.执行代码
public class WriterXml {
public static void main(String[] args) {
try {
List<User> list=new ArrayList<User>();
list.add(new User(1,"晓玉",20,100000,'女'));
list.add(new User(2,"pdd",21,100005,'女'));
list.add(new User(3,"uzi",22,100008,'男'));
System.out.println(list);
//使用DocumentHelper提供了createDocument()返回一个Document实例
Document doc=DocumentHelper.createDocument();
//2.向Document中添加标签,Document提供了添加标签的方法addElement(String name)
Element root=doc.addElement("list");
//3.给<list>根标签添加子标签<user>(遍历list集合给根标签《list》添加子标签)
for(User u:list){
//给根标签添加<user>
Element elementUser=root.addElement("user");
//给<user>标签添加子标签
Element elementName=elementUser.addElement("name");
Element elementAge=elementUser.addElement("age");
Element elementSalay=elementUser.addElement("salay");
Element elementGender=elementUser.addElement("gender");
//给子标签添加问本内容
elementName.addText(u.getName());
elementAge.addText(u.getAge()+"");
elementSalay.addText(u.getSalay()+"");
elementGender.addText(u.getGender()+"");
//给<user>标签添加属性id
elementUser.addAttribute("id",u.getId()+"");
}
//美化XML文档的格式
OutputFormat opf=OutputFormat.createPrettyPrint();
//输出流
FileOutputStream fos=new FileOutputStream("src/day15/myUser.xml");
//创建XMLWrite对象,提供了一个方法write将xml写出去
XMLWriter xw=new XMLWriter(fos,opf);
xw.write(doc);
System.out.println("写入完毕");
fos.close();
xw.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.执行结果
<?xml version="1.0" encoding="UTF-8"?>
<list>
<user id="1">
<name>晓玉</name>
<age>20</age>
<salay>100000.0</salay>
<gender>女</gender>
</user>
<user id="2">
<name>pdd</name>
<age>21</age>
<salay>100005.0</salay>
<gender>女</gender>
</user>
<user id="3">
<name>uzi</name>
<age>22</age>
<salay>100008.0</salay>
<gender>男</gender>
</user>
</list>
3.结果分析
将new出来的user对象放入到list集合中,遍历list集合,同时向xml添加标签和文本信息,再将xml写出,此结果达到了我们将对象写入到xml文件的目的。