XML eXtensible Markup Language 可扩展标记语言 保存数据,用于数据的传递 JAVA中框架的配置文件
index =========================== 1、XML的语法(掌握) 2、DTD(Schema)(了解) 3、JAVA 解析XML(掌握)
1、XML的语法(掌握) a、xml 文件的第一行为声明 <?xml version="" encoding=""?> <?xml:声明当前文档为xml文档 version:版本号,1.0,1.1 encoding:编码 b、xml文件中总会有一对根元素 c、xml的标记必须有结尾 d、xml元素必须有正确的嵌套 e、实体 <:< >:> &:& f、CDATA区:存储带有特殊字符的文本数据 <![CDATA[ ...... ]]> g、注释 h、xml标记名区分大小写,属性值必须使用""或'', 属性通常需要给属性赋值 满足xml文件语法的要求xml文件,称为格式良好的xml 文件 xml文档的解析器:浏览器,myeclipse,xml spy 课堂快速小练习: 编写一个xml文件, 存储书籍数据 书名,价格,ISBN,作者,出版社 定义三本书 编写一个存储职员信息的xml文件 2、DTD(Schema)(了解) Document Type Definition 作用:限制xml文件的结构 编写DTD,可以在xml文件内部,也可以定义单独的 DTD文件 引入:DTD a、引入一定范围内的DTD <!DOCTYPE 根元素 SYSTEM URL> b、引入一个公共的DTD <!DOCTYPE 根元素 PUBLIC "名字" URL> dtd,xml需求: 根元素:struts struts子元素:package,global-results零个或多个 package元素中有三个属性,name,extends,namespace global-results中有两个属性,name,type package子元素:action,零个或多个 action中三个属性:name(必须有),class(必须有),method action子元素:result,零个或多个 result中有两个属性:name(必须有),type <!ELEMENT struts .....> ......... <!ATTLIST..... > 3、JAVA 解析XML(掌握) a、解析XML,获取数据 b、java中的数据写入到XML文件中 JAVA中提供两种解析方式 DOM 解析 xml中的dom java SAX 解析 jdom/dom4j ======================================= ======代码的开始========== ================================== demo01.xml ================ <?xml version="1.0" encoding="utf-8"?> <students> <student> <name length="10">张三</name> <age max="90">91</age> <sex>男</sex> <info va="聪明的纯爷们"/> </student> <student> <name>李芳</name> <age>20</age> <sex>女</sex> </student> </students> ================================ demo02.xml ================ <?xml version="1.0" encoding="utf-8"?> <书库> <图书> <书名><<鹿鼎记>></书名> <价格>45</价格> <ISBN>2012358</ISBN> <作者>金庸</作者> <出版社>达内</出版社> </图书> <图书> <书名> <![CDATA[ <<鹿鼎记>> ]]> </书名> <价格>45</价格> <ISBN>2012358</ISBN> <作者>金庸</作者> <出版社>达内</出版社> </图书> <!-- <<xml文件中使用的注释 --> </书库> ================================ demo03.dtd ================ <!--DTD定义--> <!ELEMENT employees (emp*)> <!ELEMENT emp (ename,job?,sal+)> <!ELEMENT ename (#PCDATA)> <!ELEMENT job (#PCDATA)> <!ELEMENT sal (#PCDATA)> <!--Attribute List--> <!ATTLIST ename length CDATA #REQUIRED> <!ATTLIST sal max CDATA #IMPLIED> ================================ demo03.xml ================ <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE employees [ <!--DTD定义--> <!ELEMENT employees (emp*)> <!ELEMENT emp (ename,sal+)> <!ELEMENT ename (#PCDATA)> <!ELEMENT job (#PCDATA)> <!ELEMENT sal (#PCDATA)> <!--Attribute List--> <!ATTLIST ename length CDATA #REQUIRED> <!ATTLIST sal max CDATA #IMPLIED> ]>
<employees> <emp> <ename length="8">Jack</ename> <job>Salsman</job> <sal>3000</sal> </emp> <emp> <ename length="10">Mike</ename> <job>Salsman</job> <sal max="20000">3000</sal> </emp> </employees> ================================ demo04.xml ================ <?xml version="1.0" encoding="utf-8"?> <!-- 引入一个外部DTD --> <!DOCTYPE employees SYSTEM "demo03.dtd"> <employees> <emp> <ename length="8">Jack</ename> <job>Salsman</job> <sal>3000</sal> </emp> <emp> <ename length="10">Mike</ename> <job>Salsman</job> <sal max="20000">3000</sal> </emp> </employees> =========项目=================================================== Employee.java =============== public class Employee { private String ename; private String job; private double sal; public Employee() { } public Employee(String ename,String job,double sal) { this.ename = ename; this.job = job; this.sal = sal; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public double getSal() { return sal; } public void setSal(double sal) { this.sal = sal; } } ================================== TestParseXml.java ================== import java.io.InputStream; import java.util.ArrayList; import java.util.List;
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader;
public class TestParseXml {
public static void main(String[] args) { //获取被读取xml文件的输入流 InputStream is = TestParseXml .class.getClassLoader() .getResourceAsStream("xml/demo04.xml"); //System.out.println(is); //获取一个解析器 SAXReader reader = new SAXReader(); reader.setValidation(true); Document doc = null; try { //获取整个文档对象 doc = reader.read(is); //System.out.println(doc); } catch (DocumentException e) { e.printStackTrace();} //获取根元素 Element root = doc.getRootElement(); //System.out.println(root.getName()); //获取所有emp元素 List<Element> elements = root.elements("emp"); /* //System.out.println(elements.size()); //获取第一个emp元素中的ename元素 Element ename = elements.get(0).element("ename"); //System.out.println(ename.getName()); //获取ename元素中的文本数据 System.out.println(ename.getText()); Employee emp = new Employee(); emp.setEname(ename.getText()); */ List<Employee> emps = new ArrayList<Employee>(); for(Element ele:elements){ Employee emp = new Employee(); emp.setEname(ele.element("ename").getText()); emp.setJob(ele.element("job").getText()); emp.setSal(Double.parseDouble(ele.element("sal") .getText())); emps.add(emp); } System.out.println(emps.get(1).getSal()); System.out.println(emps.size()); } public List<Employee> xmlToEmp(InputStream is){ return null; } } =================================== TestWriteXml.java =================== package com.tarena.xml.demo;
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException;
import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.XMLWriter;
/** * 通过dom4j写出一个XML文件 */ public class TestWriteXml { public static void main(String[] args) { Employee emp = new Employee("张三","软件工程师",8500); //创建文档对象 Document doc = DocumentHelper.createDocument(); //创建根元素 Element root = doc.addElement("employees"); //创建元素 Element empEle = DocumentHelper.createElement("emp"); Element enameEle = DocumentHelper.createElement("ename"); enameEle.setText(emp.getEname()); empEle.add(enameEle); root.add(empEle); OutputStream out = null; try { out = new FileOutputStream("employees.xml"); XMLWriter writer = new XMLWriter(out); writer.write(root); writer.flush(); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } ========================================================= (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|