XML--DTD--Schema--DOM--SAX--DOM4J--XPATH

一.  XML作用及应用(XML:ExtensibleMarkup Language

1.    作用:描述有关系和层次结构的数据

2.    应用:用于软件的配置文件,描述数据

注:在开发中,传统的配置文件使用的是.propeties文件。以key=value的形式。#代码注释

 

二.  XML语法

1.    XML文档声明

<?xml version=”1.0” encoding=”utf-8”?>

version:版本号,目前最高版本还是1.0

encoding:指定编码,如果不写,默认的为utf-8

注意: 当我们用记事本或其它编辑器编辑xml文件,保存时默认使用的是系统编码。xml文件保存的编码应与xml里encoding编码一致,否则会因为写入及读取的编码表不同而出现错误或乱码的情况。

standalone:设置该xml文件是否独立存在

 

2.    元素(ELEMENT

元素也称为标签,必须要用结束标签

如果元素中没有主题内容,如<tag></tag>可以写成<tag/>

元素中不能交叉嵌套

一个xml文件有且只能有一个根元素

xml不会忽略空格、回车、制表符

不要以xml开头,因为xml作为保留的存在

 

命名规范:可以用字母、数字、下划线、减号、英文句点。严格区分大小写

3.    属性(ATTLIST

命名规范与元素相同

属性名不能重复,属性的值必须要以单引号或双引号引起来

属性可以用元素的形式代替

 

4.    注释<!—xxxxx-->

5.    CDATA

把元素看作为普通字符串,格式:<![CDATA[ ..... ]]>

6.    特殊字符

&amp;     =>   &

&lt;           =>     <

&gt;          =>     >

&quot       =>   “

&apos      =>   ‘

 

7.    处理指令:PI

作用:用来指挥软件如何解析XML文档。

语法:<?开头 ?>结尾

常用的指令:xml-stylesheet引入样式

 

三.  约束DTD

DTD:Document Type Definition文档类型定义

作用:约束XML编写

DTD文件保存到磁盘上时必须使用utf-8

引用DTD的方式:

1.    引用本地的DTD文件

<!DOCTYPE  根节点名称  SYSTEM  “DTD路径名称”>

2.    引用外部公共的DTD文件

<!DOCTYPE  根节点名称  PUBLIC  “DTD名称” “DTD的URL”>

 

语法:

1.    元素<ELEMENT>

例:<!ELEMENT 元素名称 使用规则>

使用规则:

(#PCDATA):普通字符串数据

EMPTY:此元素为空元素

ANY:表示此元素的主体内容可以为任何类型

(子元素):指示此元素有哪些子元素。

//如果是逗号隔开,表明必须按照声明顺序去编写XML文档,如果子元素用 | 隔开,表明任选其一。

可以用*,?,+表示元素出现的次数:*(0次或一次或多次) ?(0次或一次) +(一次或多次)  什么都没有表示必须出现一次。

 

2.    属性<ATTLIST>

例:<!ATTLIST  元素名称  属性名 属性值类型 设置说明属性名 属性值类型 设置说明>

属性值类型:

CDATA:字符类型

ENUMERATED:枚举,只能从枚举中任选其一

ID:表示属性值必须是唯一

 

设置说明:

#REQUIRED:表示此属性必须要写

#IMPLIED:可选的属性

#FIXED:取值为一个固定值       #FIXED“值”

直接值:默认值

 

3.    实体

引用实体:在DTD中定义,在XML中使用

语法:<!ENTITY 实体名称  “内容”>

引用:&实体名称;

 

参数实体:在DTD中定义,在DTD中使用

语法:<!ENTITY  %实体名称 “内容”>

引用:%实体名称;

 

四.  XML编程

1.    DOM:document object model

好处:CRUD比较方便快捷。

缺点:因为dom解析时会将整个xml文件加载至内存,变成一个对象,占用内存较大。还可能导致内存溢出。

 

 

DocumentBuilder dBuilder = DocumentBuilerFactory.newInstance().newDocumentBuilder();

Document document = dBuilder.parse(“xml路径”);

 

实例:以下文件示例中有对XML文件各种操作

 ReadBook.java

[java]  view plain copy
  1. import java.io.FileInputStream;  
  2. import java.io.FileOutputStream;  
  3. import java.io.OutputStreamWriter;  
  4.   
  5. import javax.xml.parsers.DocumentBuilder;  
  6. import javax.xml.parsers.DocumentBuilderFactory;  
  7. import javax.xml.transform.Transformer;  
  8. import javax.xml.transform.TransformerConfigurationException;  
  9. import javax.xml.transform.TransformerFactory;  
  10. import javax.xml.transform.dom.DOMSource;  
  11. import javax.xml.transform.stream.StreamResult;  
  12.   
  13. import org.w3c.dom.Attr;  
  14. import org.w3c.dom.Document;  
  15. import org.w3c.dom.Element;  
  16. import org.w3c.dom.NamedNodeMap;  
  17. import org.w3c.dom.Node;  
  18. import org.w3c.dom.NodeList;  
  19.   
  20. public class ReadBook {  
  21.   
  22.     public static void main(String[] args) throws Exception {  
  23.   
  24.         DocumentBuilderFactory dBuilderFactory = DocumentBuilderFactory  
  25.                 .newInstance();  
  26.         DocumentBuilder dBuilder = dBuilderFactory.newDocumentBuilder();  
  27.         Document document = dBuilder.parse("src\\day\\o1\\book.xml");  
  28.   
  29.         // test1(document);  
  30.         // test2(document);  
  31.         // test3(document);  
  32.         // test4(document);  
  33.         // test5(document);  
  34.         // test6(document);  
  35.         test7(document);  
  36.     }  
  37.   
  38.     // 1、得到某个具体的节点内容  
  39.     public static void test1(Document document) {  
  40.         Node node = document.getElementsByTagName("作者").item(0);  
  41.   
  42.         System.out.println(node.getTextContent());  
  43.     }  
  44.   
  45.     // 2、遍历所有元素节点  
  46.     // public static void test2(Document document) {  
  47.     // Node root = document.getElementsByTagName("书架").item(0);  
  48.     // list(root);  
  49.     // }  
  50.     //  
  51.     // public static void list(Node root) {  
  52.     // if (root instanceof Element)  
  53.     // System.out.println(root.getNodeName());  
  54.     // NodeList nodeList = root.getChildNodes();  
  55.     // for (int x = 0; x < nodeList.getLength(); x++) {  
  56.     // list(nodeList.item(x));  
  57.     // }  
  58.     // }  
  59.     //上面的代码改成  
  60.     public static void test2(Node node) {  
  61.   
  62.         if (node.getNodeType() == node.ELEMENT_NODE)  
  63.             System.out.println(node.getNodeName());  
  64.         NodeList nodeList = node.getChildNodes();  
  65.         for (int x = 0; x < nodeList.getLength(); x++) {  
  66.             test2(nodeList.item(x));  
  67.         }  
  68.     }  
  69.   
  70.     // 3、修改某个元素节点的主体内容  
  71.     public static void test3(Document document) throws Exception {  
  72.   
  73.         Element author = (Element) document.getElementsByTagName("作者").item(0);  
  74.   
  75.         author.setTextContent("zhangxiaoxiang");  
  76.   
  77.         TransformerFactory tfFactory = TransformerFactory.newInstance();  
  78.         Transformer tf = tfFactory.newTransformer();  
  79.         tf.transform(new DOMSource(document), new StreamResult(  
  80.                 new OutputStreamWriter(new FileOutputStream(  
  81.                         "src\\day\\o1\\book.xml"), "gbk")));  
  82.     }  
  83.   
  84.     // 4、向指定元素节点中增加子元素节点  
  85.     public static void test4(Document document) throws Exception {  
  86.   
  87.         Element book = (Element) document.getElementsByTagName("书").item(0);  
  88.         Element newChild = document.createElement("类型");  
  89.         Element refChild = (Element) document.getElementsByTagName("作者")  
  90.                 .item(0);  
  91.   
  92.         newChild.setTextContent("计算机类");  
  93.         book.insertBefore(newChild, refChild);  
  94.   
  95.         TransformerFactory tfFactory = TransformerFactory.newInstance();  
  96.         Transformer tf = tfFactory.newTransformer();  
  97.         tf.transform(new DOMSource(document), new StreamResult(  
  98.                 new OutputStreamWriter(new FileOutputStream(  
  99.                         "src\\day\\o1\\book.xml"), "gbk")));  
  100.     }  
  101.   
  102.     // 5、向指定元素节点上增加同级元素节点  
  103.     public static void test5(Document document) throws Exception {  
  104.   
  105.         Element bookName = (Element) document.getElementsByTagName("书名")  
  106.                 .item(1);  
  107.         Element newChild = document.createElement("类型");  
  108.         newChild.setTextContent("计算机类");  
  109.   
  110.         Element parentNode = (Element) bookName.getParentNode();  
  111.         parentNode.appendChild(newChild);  
  112.   
  113.         TransformerFactory tfFactory = TransformerFactory.newInstance();  
  114.         Transformer tf = tfFactory.newTransformer();  
  115.         tf.transform(new DOMSource(document), new StreamResult(  
  116.                 new OutputStreamWriter(new FileOutputStream(  
  117.                         "src\\day\\o1\\book.xml"), "gbk")));  
  118.     }  
  119.   
  120.     // 6、删除指定元素节点  
  121.     public static void test6(Document document) throws Exception {  
  122.         Element price = (Element) document.getElementsByTagName("售价").item(0);  
  123.         price.getParentNode().removeChild(price);  
  124.   
  125.         TransformerFactory tfFactory = TransformerFactory.newInstance();  
  126.         Transformer tf = tfFactory.newTransformer();  
  127.         tf.transform(new DOMSource(document), new StreamResult(  
  128.                 new OutputStreamWriter(new FileOutputStream(  
  129.                         "src\\day\\o1\\book.xml"), "gbk")));  
  130.     }  
  131.   
  132.     // 7、操作XML文件属性  
  133.     public static void test7(Document document) throws Exception {  
  134.         Element book = (Element) document.getElementsByTagName("书").item(0);  
  135.         // System.out.println(book.getAttribute("出版社"));  
  136.         //  
  137.         // book.setAttribute("出版社", "黑马出版社");  
  138.   
  139.         NamedNodeMap nodeMap = book.getAttributes();  
  140.         for (int x = 0; x < nodeMap.getLength(); x++) {  
  141.   
  142.             Attr attr = (Attr) nodeMap.item(x);  
  143.             System.out.println(attr.getName() + ":::" + attr.getValue());  
  144.         }  
  145.   
  146.         // TransformerFactory tfFactory = TransformerFactory.newInstance();  
  147.         // Transformer tf = tfFactory.newTransformer();  
  148.         // tf.transform(new DOMSource(document), new StreamResult(  
  149.         // new OutputStreamWriter(new FileOutputStream(  
  150.         // "src\\day\\o1\\book.xml"), "gbk")));  
  151.     }  
  152. }  
book.xml
[html]  view plain copy
  1. <?xml version="1.0" encoding="gbk" standalone="no"?><书架>  
  2.     <书 出版社="黑马出版社" 责任人="我">  
  3.         <书名>JavaOOP</书名>  
  4.         <类型>计算机类</类型>  
  5.         <作者>zhangxiaoxiang</作者>  
  6.     </>  
  7.     <>  
  8.         <书名>JavaScript</书名>  
  9.         <作者>王老师</作者>  
  10.         <售价>5.00</售价>  
  11.         <类型>计算机类</类型>  
  12.     </>  
  13. </书架>  


2.    SAX

好处:读取xml文件快,占用内存小。因为在读取的方式是一行一行读取。只适合xml文件的读取。不适合CUD操作。读一行处理一行

 

实例:

//获取SAX解析器

SAXParser parser =SAXParserFactory.newInstance().newSAXParser();

//通过SAX解析器得到读取器

XMLReader reader = parser.getXMLReader();

//注册内容处理器

reader.setContentHandler( 传入ContentHandler的实现类);

1.    此处可以自己写一个类实现ContentHandler接口,覆盖所有方法。

2.    还可以写一个内部类,因为DefaultHadler是ContentHandler的实现类,我们可以写一个内部类继承DefaultHadler,复写所需的方法。

 

需要了解到所有的方法用处及运行过程。

 

实例:

1.    查找指定的作者名。    2.    把读取到的数据封闭到JAVABEAN中。XML文件同为上面的BOOK.XML文件

 SAXReadDemo.java

[java]  view plain copy
  1. package jaxp.sax;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.xml.parsers.ParserConfigurationException;  
  6. import javax.xml.parsers.SAXParser;  
  7. import javax.xml.parsers.SAXParserFactory;  
  8.   
  9. import org.xml.sax.Attributes;  
  10. import org.xml.sax.SAXException;  
  11. import org.xml.sax.XMLReader;  
  12. import org.xml.sax.helpers.DefaultHandler;  
  13.   
  14. public class SAXReadDemo {  
  15.   
  16.     public static void main(String[] args) throws ParserConfigurationException,  
  17.             SAXException, IOException {  
  18.         // 得到sax解析器  
  19.         SAXParser parser = SAXParserFactory.newInstance().newSAXParser();  
  20.         // 得到读取器  
  21.         XMLReader reader = parser.getXMLReader();  
  22.         // 注册内容处理器  
  23.         reader.setContentHandler(new DefaultHandler() {  
  24.             private boolean flag = false;  
  25.             private int authorIndex = 0;  
  26.             @Override  
  27.             public void startElement(String uri, String localName,  
  28.                     String qName, Attributes attributes) throws SAXException {  
  29.                 if("作者".equals(qName)){  
  30.                     flag = true;  
  31.                 }  
  32.             }  
  33.   
  34.             @Override  
  35.             public void characters(char[] ch, int start, int length)  
  36.                     throws SAXException {  
  37.                 if(flag && authorIndex==1){  
  38.                     System.out.println(new String(ch,start,length));  
  39.                 }  
  40.             }  
  41.   
  42.             @Override  
  43.             public void endElement(String uri, String localName, String qName)  
  44.                     throws SAXException {  
  45.                 if("作者".equals(qName)){  
  46.                     authorIndex++;  
  47.                 }  
  48.                 flag = false;  
  49.             }  
  50.         });  
  51.         // 读取xml文档  
  52.         reader.parse("src\\book.xml");  
  53.     }  
  54.   
  55. }  

BeanRead.java

[java]  view plain copy
  1. package jaxp.sax;  
  2.   
  3. public class BookBean {  
  4.   
  5.     private String press;  
  6.     private String editer;  
  7.     private String bookname;  
  8.     private String author;  
  9.     private String type;  
  10.       
  11.     public BookBean() {  
  12.         // TODO Auto-generated constructor stub  
  13.     }  
  14.   
  15.     public BookBean(String press, String editer, String bookname,  
  16.             String author, String type) {  
  17.         super();  
  18.         this.press = press;  
  19.         this.editer = editer;  
  20.         this.bookname = bookname;  
  21.         this.author = author;  
  22.         this.type = type;  
  23.     }  
  24.   
  25.     public String getPress() {  
  26.         return press;  
  27.     }  
  28.   
  29.     public void setPress(String press) {  
  30.         this.press = press;  
  31.     }  
  32.   
  33.     public String getEditer() {  
  34.         return editer;  
  35.     }  
  36.   
  37.     public void setEditer(String editer) {  
  38.         this.editer = editer;  
  39.     }  
  40.   
  41.     public String getBookname() {  
  42.         return bookname;  
  43.     }  
  44.   
  45.     public void setBookname(String bookname) {  
  46.         this.bookname = bookname;  
  47.     }  
  48.   
  49.     public String getAuthor() {  
  50.         return author;  
  51.     }  
  52.   
  53.     public void setAuthor(String author) {  
  54.         this.author = author;  
  55.     }  
  56.   
  57.     public String getType() {  
  58.         return type;  
  59.     }  
  60.   
  61.     public void setType(String type) {  
  62.         this.type = type;  
  63.     }  
  64.   
  65.     @Override  
  66.     public String toString() {  
  67.         return "BookBean [press=" + press + ", editer=" + editer  
  68.                 + ", bookname=" + bookname + ", author=" + author + ", type="  
  69.                 + type + "]";  
  70.     }  
  71.       
  72.       
  73. }  

Read2JavaBean.java

[java]  view plain copy
  1. package jaxp.sax;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import javax.xml.parsers.SAXParser;  
  7. import javax.xml.parsers.SAXParserFactory;  
  8.   
  9. import org.xml.sax.Attributes;  
  10. import org.xml.sax.SAXException;  
  11. import org.xml.sax.XMLReader;  
  12. import org.xml.sax.helpers.DefaultHandler;  
  13.   
  14. public class Read2JavaBean {  
  15.   
  16.     /** 
  17.      * 读取xml文件并将数据封装至javabean中 
  18.      */  
  19.     static final List list = new ArrayList();  
  20.   
  21.     public static void main(String[] args) throws Exception {  
  22.   
  23.         // 得到sax解析器  
  24.         SAXParser sax = SAXParserFactory.newInstance().newSAXParser();  
  25.         // 得到读取器  
  26.         XMLReader reader = sax.getXMLReader();  
  27.         // 注册内容处理器  
  28.         reader.setContentHandler(new DefaultHandler() {  
  29.   
  30.             private BookBean book = null;  
  31.             private String current = null;  
  32.   
  33.             @Override  
  34.             public void startElement(String uri, String localName,  
  35.                     String qName, Attributes attributes) throws SAXException {  
  36.   
  37.                 if ("书".equals(qName)) {  
  38.                     book = new BookBean();  
  39.   
  40.                     book.setPress(attributes.getValue(0));  
  41.                     book.setEditer(attributes.getValue(1));  
  42.                 }  
  43.   
  44.                 if ("书名".equals(qName))  
  45.                     current = qName;  
  46.   
  47.                 if ("作者".equals(qName))  
  48.                     current = qName;  
  49.   
  50.                 if ("类型".equals(qName))  
  51.                     current = qName;  
  52.             }  
  53.   
  54.             @Override  
  55.             public void characters(char[] ch, int start, int length)  
  56.                     throws SAXException {  
  57.                 if ("书名".equals(current))  
  58.                     book.setBookname(new String(ch, start, length));  
  59.                 if ("作者".equals(current))  
  60.                     book.setAuthor(new String(ch, start, length));  
  61.                 if ("类型".equals(current))  
  62.                     book.setType(new String(ch, start, length));  
  63.             }  
  64.   
  65.             @Override  
  66.             public void endElement(String uri, String localName, String qName)  
  67.                     throws SAXException {  
  68.   
  69.                 if ("书".equals(qName)) {  
  70.                     list.add(book);  
  71.                     book = null;  
  72.                 }  
  73.   
  74.                 current = null;  
  75.             }  
  76.         });  
  77.         // 读取xml文件内容  
  78.         reader.parse("src\\book.xml");  
  79.   
  80.         System.out.println(list);  
  81.     }  
  82. }  


3.    DOM4J解析器

结合DOM和SAX的优点,在读取时用SAX的原理,在CUD操作时用DOM原理。

 

实例:XML文件进行CRUD操作。XML文件同为上面的BOOK.XML文件

 Dom4JDemo.java

[java]  view plain copy
  1. package dom4j;  
  2.   
  3. import java.io.FileWriter;  
  4. import java.io.IOException;  
  5. import java.io.UnsupportedEncodingException;  
  6. import java.util.Iterator;  
  7. import java.util.List;  
  8.   
  9. import org.dom4j.Attribute;  
  10. import org.dom4j.Document;  
  11. import org.dom4j.DocumentException;  
  12. import org.dom4j.Element;  
  13. import org.dom4j.Node;  
  14. import org.dom4j.io.OutputFormat;  
  15. import org.dom4j.io.SAXReader;  
  16. import org.dom4j.io.XMLWriter;  
  17.   
  18. public class Dom4jDemo {  
  19.   
  20.     /** 
  21.      * @param args 
  22.      * @throws Exception 
  23.      */  
  24.     public static void main(String[] args) throws Exception {  
  25.         // TODO Auto-generated method stub  
  26.         SAXReader reader = new SAXReader();  
  27.         Document document = reader.read("src//book.xml");  
  28.   
  29.         // test1(document);  
  30.         // test2(document);  
  31.         // test3(document);  
  32.         // test4(document);  
  33.         // test5(document);  
  34.         // test6(document);  
  35.         test7(document);  
  36.     }  
  37.   
  38.     // 1、得到某个具体的节点内容  
  39.     public static void test1(Document document) {  
  40.   
  41.         Element root = document.getRootElement();  
  42.         List<Element> lists = root.elements();  
  43.         String author = lists.get(1).elementText("作者");  
  44.         System.out.println(author);  
  45.     }  
  46.   
  47.     // 2、遍历所有元素节点  
  48.     public static void test2(Document document) {  
  49.         treeWalk(document.getRootElement());  
  50.     }  
  51.   
  52.     public static void treeWalk(Element element) {  
  53.   
  54.         for (int x = 0; x < element.nodeCount(); x++) {  
  55.   
  56.             Node node = element.node(x);  
  57.             if (node instanceof Element) {  
  58.   
  59.                 System.out.println(node.getName());  
  60.                 treeWalk((Element) node);  
  61.             } else  
  62.                 System.out.println(node.getText());  
  63.         }  
  64.     }  
  65.   
  66.     // 3、修改某个元素节点的主体内容  
  67.     public static void test3(Document document) throws Exception {  
  68.   
  69.         Element root = document.getRootElement();  
  70.         List<Element> list = root.elements();  
  71.   
  72.         Element bookE = list.get(1);  
  73.   
  74.         Element typeE = bookE.element("类型");  
  75.   
  76.         typeE.setText("图书类");  
  77.         OutputFormat format = OutputFormat.createPrettyPrint();  
  78.         format.setEncoding("gbk");  
  79.         XMLWriter writer = new XMLWriter(new FileWriter("src//book.xml"),  
  80.                 format);  
  81.         writer.write(document);  
  82.         writer.close();  
  83.     }  
  84.   
  85.     // 4、向指定元素节点中增加子元素节点  
  86.     public static void test4(Document document) throws Exception {  
  87.   
  88.         Element root = document.getRootElement();  
  89.   
  90.         Element book = root.addElement("书");  
  91.         book.addAttribute("出版社""传智");  
  92.   
  93.         book.addElement("书名").addText("html");  
  94.         book.addElement("作者").addText("王昭廷");  
  95.         book.addElement("类型").addText("动画片");  
  96.   
  97.         OutputFormat format = OutputFormat.createPrettyPrint();  
  98.         format.setEncoding("gbk");  
  99.         XMLWriter writer = new XMLWriter(new FileWriter("src//book.xml"),  
  100.                 format);  
  101.         writer.write(document);  
  102.         writer.close();  
  103.     }  
  104.   
  105.     // 5、向指定元素节点上增加同级元素节点  
  106.     public static void test5(Document document) throws Exception {  
  107.         Element root = document.getRootElement();  
  108.   
  109.         Element bookE = root.element("书");  
  110.   
  111.         Element bookNameE = bookE.element("书名");  
  112.   
  113.         bookNameE.getParent().addElement("零售价").addText("32.22");  
  114.   
  115.         OutputFormat format = OutputFormat.createPrettyPrint();  
  116.         format.setEncoding("gbk");  
  117.         XMLWriter writer = new XMLWriter(new FileWriter("src//book.xml"),  
  118.                 format);  
  119.         writer.write(document);  
  120.         writer.close();  
  121.     }  
  122.   
  123.     // 6、删除指定元素节点  
  124.     public static void test6(Document document) throws Exception {  
  125.   
  126.         Element root = document.getRootElement();  
  127.   
  128.         Element book = root.element("书");  
  129.         Element price = book.element("零售价");  
  130.   
  131.         price.getParent().remove(price);  
  132.   
  133.         OutputFormat format = OutputFormat.createPrettyPrint();  
  134.         format.setEncoding("gbk");  
  135.         XMLWriter writer = new XMLWriter(new FileWriter("src//book.xml"),  
  136.                 format);  
  137.         writer.write(document);  
  138.         writer.close();  
  139.     }  
  140.   
  141.     // 7、操作XML文件属性  
  142.     public static void test7(Document document) throws Exception {  
  143.   
  144.         Element root = document.getRootElement();  
  145.         Element book = root.element("书");  
  146.         for (Iterator<Attribute> it = book.attributeIterator(); it.hasNext();) {  
  147.   
  148.             Attribute att = it.next();  
  149.   
  150.             System.out.println(att.getName() + "=" + att.getValue());  
  151.         }  
  152.     }  
  153. }  


4.    单元测试JUNIT

在Eclipse中可以新建一个Junit Test Case文件,用于对某个类的方法进行测试。

@Before         每测试一个方法之前,都读取此方法。执行多个方法,此方法也执行多次。

@After             每测试一个方法之后,都读取此方法。执行多个方法,此方法也执行多次。

 

@BeforeClass   此上述一样,区别在于,无论执行多少方法,此方法只执行一次。

@AfterClass     如上。

 

@Test              在要执行的测试方法前加@Test

(Timeout=1000)       代表测试的方法执行的时间,如果超过此设置的时间,则测试会不通过。

(exception=java.lang.NullPointException.class)    代表测试的方法需要返回一个指定的异常。

 

Assert.assertEquals(期待值,实际值);

此系列方法很多,还有判断返回是不是Boolean型的true。具体查API。

      

5.    XPATH

用于在读取XML中元素时能快速定位一个指定的标签。

Node node = document.selectSingleNode(“//书[1]”);

关于Xpath的使用规则查看Xpath的文档。

      

6.    学生成绩 案例:

分层结构:

UI---JAVABEAN---DAO---UTILS---DB

 

Utils中的方法为static方法。

Dao 中封装所有对数据库进行操作的方法。如果操作的方式不同,可以创建多个Dao包。然后抽取成Interface。多个Dao包实现此Interface。方便以后选择其它操作方式。

 

 

Utils包对于异常的处理原则:

可以抛出:但是调用该工具类的必须处理。也可以不抛

 

非工具类的异常的处理原则:

看调用者能不能处理,不能处理则不抛。

 

异常转译和异常链

五. Schema约束

       扩展名:xsd   本身也是一个xml文件

      

       1、查看Schema文档,找到根元素,在xml中先编写根元素

<?xmlversion="1.0" encoding="gbk"?>

<书架>

 

</书架>

2、思考:书架来自哪个名称空间。

       使用xmlns关键字(xml namespace)来声明来自的命名空间(查阅schema文档中targetNamespace指定的值)

 

<?xmlversion="1.0" encoding="gbk"?>

<itheima:书架 xmlns:itheima="http://www.itcast.cn">

 

</itheima:书架>

3、思考:名称空间对应的xsd文件在何方?

       使用schemaLocation来说明名称空间和xsd文件的对应关系。

       有2个取值:名称空间和xsd文件路径,两者之间用空格、回车、换行分隔

 

<?xmlversion="1.0" encoding="gbk"?>

<itheima:书架 xmlns:itheima="http://www.itcast.cn"

              schemaLocation="http://www.itcast.cnbook.xsd">

 

</itheima:书架>

4、思考:schemaLocation又哪来的呢?来自W3C的标准名称空间

              http://www.w3.org/2001/XMLSchema-instance

<?xmlversion="1.0" encoding="gbk"?>

<itheima:书架 xmlns:itheima="http://www.itcast.cn"

              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

              xsi:schemaLocation="http://www.itcast.cnbook.xsd">    

</itheima:书架>

你可能感兴趣的:(XML--DTD--Schema--DOM--SAX--DOM4J--XPATH)