XML的生成与解析

来源:互联网 发布:上海行知教育怎么样 编辑:程序博客网 时间:2024/06/04 20:10

准备工作

1、员工工具类
class Emp {private int id;private String name;private int age;private String gender;private int salary;public Emp(){}public Emp(int id, String name, int age, String gender, int salary) {super();this.id = id;this.name = name;this.age = age;this.gender = gender;this.salary = salary;}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 String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}@Overridepublic String toString() {return id+", "+name+", "+age+", "+gender+", "+salary;}}
2、需要导入的包
dom4j 支持xml的生成和解析
 jaxen 支持在Document解析中使用xpath

生成xml文档步骤

1.创建Document对象,表示xml文档

2.向Document对象中添加元素

3.按照预定的格式向根元素中添加子元素最终形成既定格式

4.创建XmlWriter

5.通过XMLWriter写出Document

//使用DOM生成xml文档public static void writeXML() throws IOException{List<Emp> empList = new ArrayList<Emp>();empList.add(new Emp(1, "张三", 25, "男", 4000));empList.add(new Emp(2, "李四", 26, "女", 5000));empList.add(new Emp(3, "王五", 27, "男", 6000));empList.add(new Emp(4, "赵六", 28, "女", 7000));empList.add(new Emp(5, "钱七", 29, "男", 8000));//第一步Document doc = DocumentHelper.createDocument();/* * 第二步 * Doucument提供了添加根元素的方法: * Element addElement(String name) * 向指定文档中添加指定名字的根元素,并以Element的实例形式将其返回,以便继续向根元素中做其他操作 * 需要注意的是,该方法只能调用一次。因为一个xml文档只能有一个根元素 */Element root = doc.addElement("list");//第三步for(Emp emp : empList){/* * 将每一个emp实例表示的员工信息以一个<emp>标签形式存入xml文档 *  * Element提供了方法: * Element addElement(String name) * 向当前标签中添加给定名字的子标签,并以Element实例表示和返回 */Element empEle = root.addElement("emp");//添加nameElement nameEle = empEle.addElement("name");/* * Element提供了方法: * Element addText(String text) * 向当前标签中添加指定的文本信息 */nameEle.addText(emp.getName());//添加ageElement ageEle = empEle.addElement("age");ageEle.addText(emp.getAge()+"");//添加genderElement genderEle = empEle.addElement("gender");genderEle.addText(emp.getGender());//添加工资Element salaryEle = empEle.addElement("salary");salaryEle.addText(emp.getSalary()+"");/* * Element提供了添加属性的方法: * Element addAttribute(String name, String value) */empEle.addAttribute("id", emp.getId()+"");}//第四步XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());writer.setOutputStream(new FileOutputStream("myemp.xml"));//第五步writer.write(doc);System.out.println("写出完毕!");writer.close();}

使用dom解析xml文档步骤

1.创建SAXReader

2.使用SAXReader读取并解析xml文档解析后会返回一个Document的对象,该对象即表示解析的xml文档内容(这一步就是dom耗时耗资的地方了,因为会将xml文档全部读取完并载入内存)

3.通过Document获取根元素

4.根据文档结构从根元素开始逐级获取子元素,已达到遍历xml文档内容的目的

//使用dom解析xml文档public static void parseXML() throws FileNotFoundException, DocumentException{//第一步SAXReader reader = new SAXReader();//第二步Document doc = reader.read(new FileInputStream("myemp.xml"));/* * 第三步 获取根元素 * Document提供了获取根元素的方法: * Element getRootElement() *  * Element * 每一个Element实例都表示xml文档中的一个元素,即: * 一对标签通过Element实例,可以获取该实例表示的标签中的相关信息 * 例如该标签的名字标签的属性,以及该标签包含的所有子标签 */Element root = doc.getRootElement();/* * String getName() 获得标签名 */System.out.println("根标签名为:"+root.getName());/* * 第四步 * 解析xml文档内容,获取其中保存的所有员工信息 * 每个员工解析后可以使用Emp的一个实例保存 *///该集合用来保存解析出来的所有员工信息List<Emp> empList = new ArrayList<Emp>();/** * Element提供了获取子标签的相关方法。常用的有: *  * Element element(String name)获取当前标签下指定名字的子标签(在子标签名字没有重复的时候常用) *  * List elements()获取当前表标签下所有子标签,返回的集合中是若干的Element实例,每一个实例表示其中一个子标签 *  * List elements(String name)获取当前标签下指定名字的所有子标签(在子标签名字有重复的时候使用) *  * String getText()获取当前标签中的文本 *  * String getTextTrim()在获取了标签中的文本之后,还会去除该字符串两端的空白 *///获取跟标签中的所有子标签List<Element> list = root.elements();//遍历所有子标签,每一个就是一个emp标签for(Element each : list){//获取name的值Element nameEle = each.element("name"); //获取<name>标签String name = nameEle.getText(); //获取标签中的文本//获取age值int age = Integer.parseInt(each.elementText("age"));//获取genderString gender = each.elementText("gender");//获取salaryint salary = Integer.parseInt(each.elementText("salary"));/* * Attribute attribute(int index) * Attribute attribute(String name) * 获取当前标签中的属性 *  * Attribute的每一个实例用于表示标签的一个属性 */Attribute attr = each.attribute("id");int id = Integer.parseInt(attr.getValue());System.out.print(id+"\t"+name+"\t"+gender+"\t"+age+"\t"+salary);System.out.println();Emp emp = new Emp(id, name, age, gender, salary);empList.add(emp);}System.out.println("解析完毕!");System.out.println("得到了"+empList.size()+"个员工信息");for(Emp emp1 : empList){System.out.println(emp1);}}

使用xpath检索数据

//使用xpath检索xml数据public static void useXpath(){try {SAXReader reader = new SAXReader();Document doc = reader.read(new FileInputStream("myemp.xml"));String xpath = "/list/emp[name ='王五']/gender";List<Element> list = doc.selectNodes(xpath);for(Element e : list){System.out.println(e.getText());}} catch (Exception e) {e.getStackTrace();}}









0 0