xml

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、实体
  <:&lt;
  >:&gt;
  &:&amp;
 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"?>
<书库>
 <图书>
  <书名>&lt;&lt;鹿鼎记&gt;&gt;</书名>
  <价格>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,job?,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();
    }
 }
}
=========================================================


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值