XML相关操作

来源:互联网 发布:死而后已 不亦远乎 编辑:程序博客网 时间:2024/06/04 04:50

有一个Emp类,用于描述员工

代码如下:

/** * 该类用于描述emp.xml文件中的员工 */public 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;}public String toString(){return id+","+name+","+age+","+gender+","+salary;}}
代码一:
/** * 使用DOM解析XML文件 */public class XMLDemo1 {public static void main(String[] args) {/** * 解析XML文件的基本流程 * 1.创建SAXReader用来读取XML文件 * 2.指定xml文件使得SAXReader读取,并解析成文档对象Document * 3.获取更元素 * 4.获取每一个元素,从而达到解析的目的 *//** * 常用的读取方法 * Docment read(InputStream in)  字节流 * Docment read(Reader read)     字符流 * Docment read(File file)       文件对象 */SAXReader reader = new SAXReader();File fileXml = new File("emp.xml"); try {Document doc = reader.read(fileXml);Element root = doc.getRootElement();/** * Element element(String name) * 获取当前标签下第一个名为给定名字的标签 *  * List elements(String name) * 获取当前标签下所有给定名字的标签 *  * List eleemnts() * 获取当前标签下所有的子标签 *  * String elementText(Stirng name) * 获取当前标签中名为给定名字的子标签中间的文本 *  * Attribute attribute(String name) * 获取当前标签中指定名字的属性 *  * String getName() * 获取属性的名字 *  * String getValue * 获取属性的值  *  */List<Emp> list = new ArrayList<Emp>();List<Element> listXml = root.elements("emp");for(Element emp : listXml){Attribute att = emp.attribute("id");int id = Integer.parseInt(att.getValue());String name = emp.elementText("name");int age = Integer.parseInt(emp.elementText("age"));String gender = emp.elementText("gender");int salary = Integer.parseInt(emp.elementText("salary"));list.add(new Emp(id,name,age,gender,salary));}System.out.println("解析了"+list.size()+"个员工信息");//输出每个员工的信息for(Emp e : list){System.out.println(e);}} catch (DocumentException e) {e.printStackTrace();}}}
测试结果如下:

解析了5个员工信息1,张三,34,男,30002,李四,21,女,40003,王五,46,女,65004,赵六,28,男,44005,钱七,53,男,12000
*************************************************************************************************************************************
代码二:

/** * 使用DOM写出一个XML */public class XMLDemo2 {public static void main(String[] args) {List<Emp> list = new ArrayList<Emp>();list.add(new Emp(1,"jack",33,"男",5000));list.add(new Emp(2,"boss",55,"男",5500));list.add(new Emp(3,"marry",22,"女",3500));list.add(new Emp(4,"kate",25,"女",6000));list.add(new Emp(5,"tom",31,"男",8500));/** * 生成一个XML文件的基本步骤 * 1.创建文档对象Document * 2.为Document添加根节点 * 3.为根节点组建树状结构 * 4.创建XMLWriter * 5.为XMLWriter指定写出目标 * 6.写出xml */Document doc = DocumentHelper.createDocument();/** * Document的方法 * Element addElement(String name) * 该方法用于向文档中添加给定名字的根元素,返回的Element实例就表示该根元素 * 需要注意的是,该方法只能调用一次,调用第二次会抛出异常 *  * Element addElement(String name) * 向当前标签中添加给定名字的子标签 */Element root = doc.addElement("list");//循环添加每一个员工信息for(Emp e : list){Element emp = root.addElement("emp");/** * Element addAttribute(String name,String value) * 为当前标签添加给定名字以及对应值的属性,返回值任然为当前标签 * 这样做的目的是可以连续添加若干属性 */emp.addAttribute("id", String.valueOf(e.getId()));Element name = emp.addElement("name");name.setText(e.getName());//addText()方法是在原有字符串后追加emp.addElement("age").setText(String.valueOf(e.getAge()));emp.addElement("gender").addText(e.getGender());emp.addElement("salary").addText(String.valueOf(e.getSalary()));}/** * 当退出循环后,那么Document中的结构就已经建完了,需要将其写出为xml */XMLWriter writer = null;FileOutputStream out = null;try {writer = new XMLWriter(new FileOutputStream("myemp.xml"),OutputFormat.createPrettyPrint());/** * 将Document对象写出到文件中、这时会将Document转换为xml格式写入文件 */writer.write(doc);} catch (Exception e1) {e1.printStackTrace();} finally {if(writer != null){try {writer.close();} catch (IOException e1) {e1.printStackTrace();}}}}}
测试结果如下:

<?xml version="1.0" encoding="UTF-8"?><list>  <emp id="1">    <name>jack</name>    <age>33</age>    <gender>男</gender>    <salary>5000</salary>  </emp>  <emp id="2">    <name>boss</name>    <age>55</age>    <gender>男</gender>    <salary>5500</salary>  </emp>  <emp id="3">    <name>marry</name>    <age>22</age>    <gender>女</gender>    <salary>3500</salary>  </emp>  <emp id="4">    <name>kate</name>    <age>25</age>    <gender>女</gender>    <salary>6000</salary>  </emp>  <emp id="5">    <name>tom</name>    <age>31</age>    <gender>男</gender>    <salary>8500</salary>  </emp></list>

**************************************************************************************************************

代码三:

/** * DOM4J对XPatch的支持 */public class XMLDemo3 {public static void main(String[] args) {SAXReader reader = new SAXReader();try {Document doc = reader.read(new File("myemp.xml")) ;/** * List selectNodes(String xpath) * 根据给定的xpath查询对应的节点 *///String path = "/list/emp[salary>5000]";//工资大于5000的人//String path = "/list/emp[gender='女']/salary[.>4000]";//工资大于4000的女同志的工资String path = "/list/emp[gender='女' and age>20]/salary";//女同志中年龄大于24岁的工资List list = doc.selectNodes(path);//List不用添加泛型,因为xpath除了获取标签之外还有属性,根据获取的内容强转即可for(Object o : list){Element e = (Element) o;System.out.println(e.getText());}} catch (DocumentException e) {e.printStackTrace();}}}





0 0
原创粉丝点击