Unit07: XML语法 、 XML解析
emplist.xml
<?xml version="1.0" encoding="UTF-8"?> <list> <emp id="1"> <name>张三</name> <age>34</age> <gender>男</gender> <salary>3000</salary> </emp> <emp id="2"> <name>李四</name> <age>21</age> <gender>女</gender> <salary>4000</salary> </emp> <emp id="3"> <name>王五</name> <age>46</age> <gender>女</gender> <salary>6500</salary> </emp> <emp id="4"> <name>赵六</name> <age>28</age> <gender>男</gender> <salary>4400</salary> </emp> <emp id="5"> <name>钱七</name> <age>53</age> <gender>男</gender> <salary>12000</salary> </emp> </list>
emplist.xml
myemp.xml
<?xml version="1.0" encoding="UTF-8"?> <list> <emp id="1"> <name>张三</name> <age>22</age> <gender>男</gender> <salary>5000</salary> </emp> <emp id="2"> <name>李四</name> <age>23</age> <gender>女</gender> <salary>6000</salary> </emp> <emp id="3"> <name>王五</name> <age>24</age> <gender>男</gender> <salary>7000</salary> </emp> <emp id="4"> <name>赵六</name> <age>25</age> <gender>女</gender> <salary>8000</salary> </emp> <emp id="5"> <name>钱七</name> <age>26</age> <gender>男</gender> <salary>9000</salary> </emp> </list>
myemp.xml
用当前类的实例保存xml文档中的一个员工信息 (这个是用构造方法生成的)
package day12; /** * 用当前类的实例保存xml文档中的一个员工信息 * @author adminitartor * */ 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; } }
Emp.java
* 使用DOM4J解析XML文档
package day12; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 使用DOM4J解析XML文档 * * 将emplist.xml文档中的所有员工信息解析出来 * 并存入到一个List集合保存 * @author adminitartor * */ public class ParseXmlDemo { public static void main(String[] args) { /* * 使用DOM4J解析XML的大致流程 * 1:创建SAXReader * 2:使用SAXReader读取XML文档,并返回 * 一个Document对象。 * 这一步就是DOM解析XML耗时耗资源的地方 * 因为这一步就会将XML文档中所有内容解析 * 出来并以一个Document对象保存。由于对象 * 存于内存,所以文档内容大的话会相应消耗 * 资源。 * 3:从Document中获取根元素 * 4:根据XML文档结构从根元素中逐级获取子元 * 素,最终达到遍历XML文档数据的目的。 */ try { //1 SAXReader reader = new SAXReader(); //2读取xml文档并返回Document对象 // reader.read(new File("emplist.xml")); Document doc = reader.read( new FileInputStream("emplist.xml") ); System.out.println("读取xml文档完毕!"); /* * 3 获取根元素 * Element的每一个实例用于表示XML文档 * 中的一个元素(一对标签) * * Element用于获取当前标签信息的相关方法: * * String getName() * 获取当前标签的名字 * * String getText() * 获取当前标签中间的文本信息 * * List elements() * 获取当前标签下的所有子标签 * * List elements(String name) * 获取当前标签下所有同名子标签 * * Element element(String name) * 获取当前标签下指定名字的子标签 * * String elementText(String name) * 获取当前标签下指定名字的子标签中间的 * 文本。 * ele.elementText(name) * 相当于调用了: * ele.element(name).getText() * * Attribute attribute(String name) * 获取当前标签下指定名字的属性 * */ Element root = doc.getRootElement(); /* * 该集合用于保存从xml文档中解析出来的 * 所有员工信息 */ List<Emp> empList = new ArrayList<Emp>(); //获取根标签<list>下面的所有子标签<emp> List<Element> list = root.elements(); /* * 遍历每一个员工标签<emp>,并将信息保存 * 到一个Emp对象上,然后存入empList集合 */ for(Element empEle : list){ //获取name Element nameEle = empEle.element("name"); String name = nameEle.getText(); // System.out.println(name); //获取age int age = Integer.parseInt( empEle.elementText("age") ); //gender String gender = empEle.elementText("gender"); //salary int salary = Integer.parseInt( empEle.elementText("salary") ); /* * Attribute的每一个实例用于表示某个标签 * 中的一个属性。 * 常用方法: * String getName() * 获取属性名 * * String getValue() * 获取属性值 */ Attribute attri = empEle.attribute("id"); int id = Integer.parseInt( attri.getValue() ); Emp emp = new Emp(id, name, age, gender, salary); empList.add(emp); } System.out.println("解析完毕!"); for(Emp emp : empList){ System.out.println(emp); } } catch (Exception e) { e.printStackTrace(); } } }
ParseXmlDemo.java
* 使用DOM4J生成XML文档
package day12; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; /** * 使用DOM4J生成XML文档 * @author adminitartor * */ public class WriteXmlDemo { public static void main(String[] args) { /* * 生成XML文档的大致步骤: * 1:创建一个Document对象表示一个空白 * 文档 * 2:向Document中添加根元素 * 3:按照想生成的xml文档的结构顺序逐级的 * 向根元素中添加子元素以及对应的信息 * 4:创建XmlWriter对象 * 5:将Document对象写出以形成xml文档 * 6:关闭XmlWriter */ try { List<Emp> empList = new ArrayList<Emp>(); empList.add(new Emp(1,"张三",22,"男",5000)); empList.add(new Emp(2,"李四",23,"女",6000)); empList.add(new Emp(3,"王五",24,"男",7000)); empList.add(new Emp(4,"赵六",25,"女",8000)); empList.add(new Emp(5,"钱七",26,"男",9000)); //1 创建一个空白文档 Document doc = DocumentHelper.createDocument(); /* * 2 向文档中添加根元素 * Element addElement(String name) * 添加给定名字的根元素,并将该元素以Element * 实例形式返回,以便于继续操作。 * * 注意,该方法只能调用一次,因为一个文档只能有 * 一个根元素 * */ Element root = doc.addElement("list"); /* * 3 添加子标签以形成xml文档结构 * 将集合中的每个员工信息作为一个<emp>标签 * 添加到根标签中 */ for(Emp emp : empList){ /* * Element提供了添加相应信息的方法: * * Element addElement(String name) * 向当前标签中添加给定名字的子标签并将其 * 返回。 */ Element empEle = root.addElement("emp"); //向<emp>标签中添加<name>标签 Element nameEle = empEle.addElement("name"); //向<name>标签中添加文本信息 nameEle.addText(emp.getName()); empEle.addElement("age").addText(emp.getAge()+""); empEle.addElement("gender").addText(emp.getGender()); empEle.addElement("salary").addText(emp.getSalary()+""); /* * 向<emp>标签中添加属性"id" */ empEle.addAttribute("id", emp.getId()+""); } //4 XMLWriter writer = new XMLWriter( new FileOutputStream("myemp.xml"), OutputFormat.createPrettyPrint() ); writer.write(doc); System.out.println("写出完毕!"); writer.close(); } catch (Exception e) { e.printStackTrace(); } } }
WriteXmlDemo.java
* 使用XPath检索XML数据
package day12; import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 使用XPath检索XML数据 * @author adminitartor * */ public class XpathDemo { public static void main(String[] args) { try { SAXReader reader = new SAXReader(); Document doc = reader.read( new File("myemp.xml") ); String path = "/list/emp[gender=‘女‘ and age>24]/salary"; List<Element> list = doc.selectNodes(path); for(Element e : list){ System.out.println(e.getText()); } } catch (Exception e) { e.printStackTrace(); } } }
XpathDemo.java
时间: 2024-11-24 11:09:02