- XML基础
最简单的语法:<?xml version=“1.0”?>
如:<?xml version=“1.0” encoding=“utf-8”?>
如:<?xml version=“1.0” encoding=“utf-8” standalone=“yes”?> |
- XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式:
- 包含标签主体:<mytag>some content</mytag>
- 不含标签主体:<mytag />(有时也叫空标签)
- 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
- <mytag1><mytag2></mytag1></mytag2>
- 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
- 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。
<side>
ww.1000phone.copm
</side>
<side>ww.1000phone.copm</side>
- XML基础
最简单的语法:<?xml version=“1.0”?>
如:<?xml version=“1.0” encoding=“utf-8”?>
如:<?xml version=“1.0” encoding=“utf-8” standalone=“yes”?> |
- XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式:
- 包含标签主体:<mytag>some content</mytag>
- 不含标签主体:<mytag />(有时也叫空标签)
- 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
- <mytag1><mytag2></mytag1></mytag2>
- 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
- 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。
<side>
ww.1000phone.copm
</side>
<side>ww.1000phone.copm</side>
- 由于在XML中,空格和换行都作为原始内容被处理,所以,在解析XML文件时要特殊处理下,绕过这些空格和换行符。
- 元素命名规范:一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范
- 区分大小写,例如,<A>和<a>是两个不同的标记。(与java、c变量命名一致)
- 不能以数字或"_" (下划线)开头。
<side> ww.1000phone.copm </side>
<side>ww.1000phone.copm</side>
|
在 XML 中有 5 个预定义的实体引用:
< |
< |
小于 |
> |
> |
大于 |
& |
& |
和号 |
' |
' |
省略号 |
" |
" |
引号 |
- 注意:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。
CDATA区
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
package com.qf.books;
/**
*
* @author Administrator
*
*/
public class Books {
private String name;
private String author;
private int price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Books [name=" + name + ", author=" + author + ", price="
+ price + "]";
}
public Books(String name, String author, int price) {
this.name = name;
this.author = author;
this.price = price;
}
public Books() {
}
}
package com.qf.sax;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.qf.books.Books;
public class MyHandler extends DefaultHandler{
private List<Books> list;
private Books book;
private String qName;
@Override //开启文件
public void startDocument() throws SAXException {
//创建一个list集合
list = new ArrayList<Books>();
}
@Override //开启元素
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//创建一个books对象
if(qName.equals("book")){
book = new Books();
}
this.qName = qName;
}
@Override //取值
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println("取值");
String coutent = new String(ch, start, length);
String str = coutent.trim();
if(!"".equals(str)){
if("name".equals(qName)){
book.setName(str);
}else if("author".equals(qName)){
book.setAuthor(str);
}else if("price".equals(qName)){
book.setPrice(Integer.parseInt(str));
}
}
}
@Override //结束元素
public void endElement(String uri, String localName, String qName)
throws SAXException {
//将对象放入list集合
if("book".equals(qName)){
list.add(book);
}
}
public List<Books> getList() {
return list;
}
}