Xml学习道路之Java解析版

  • XML基础

 

  1. 在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。(前面注释都不允许

    最简单的语法:<?xml version=“1.0”?>

  1. 用encoding属性说明文档所使用的字符编码。保存在磁盘上的文件编码要与声明的编码一致。

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

  1. 用standalone属性说明文档是否独立,即是否依赖其他文档。

   如:<?xml version=“1.0”  encoding=“utf-8”  standalone=“yes”?>

 

  1. XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式:
    1. 包含标签主体:<mytag>some content</mytag>
    2. 不含标签主体:<mytag    />(有时也叫空标签)
    3. 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套
    4. <mytag1><mytag2></mytag1></mytag2>
  2. 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
  3. 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的

<side>

ww.1000phone.copm

</side>

 

<side>ww.1000phone.copm</side>

  • XML基础

 

  1. 在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。(前面注释都不允许

    最简单的语法:<?xml version=“1.0”?>

  1. 用encoding属性说明文档所使用的字符编码。保存在磁盘上的文件编码要与声明的编码一致。

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

  1. 用standalone属性说明文档是否独立,即是否依赖其他文档。

   如:<?xml version=“1.0”  encoding=“utf-8”  standalone=“yes”?>

 

  1. XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式:
    1. 包含标签主体:<mytag>some content</mytag>
    2. 不含标签主体:<mytag    />(有时也叫空标签)
    3. 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套
    4. <mytag1><mytag2></mytag1></mytag2>
  2. 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
  3. 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的

<side>

ww.1000phone.copm

</side>

 

<side>ww.1000phone.copm</side>

  1. 由于在XML中,空格和换行都作为原始内容被处理,所以,在解析XML文件时要特殊处理下,绕过这些空格和换行符。
  2. 元素命名规范:一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范
    1. 区分大小写,例如,<A>和<a>是两个不同的标记。(与java、c变量命名一致)
    2. 不能以数字或"_" (下划线)开头。
  1. XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式:
    1. 包含标签主体:<mytag>some content</mytag>
    2. 不含标签主体:<mytag    />(有时也叫空标签)
    3. 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套
    4. <mytag1><mytag2></mytag1></mytag2>
  2. 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。
  3. 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的

<side>

ww.1000phone.copm

</side>

 

<side>ww.1000phone.copm</side>

  1. 由于在XML中,空格和换行都作为原始内容被处理,所以,在解析XML文件时要特殊处理下,绕过这些空格和换行符。
  2. 元素命名规范:一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范
    1. 区分大小写,例如,<A>和<a>是两个不同的标记。(与java、c变量命名一致)
    2. 不能以数字或"_" (下划线)开头。
    3. 不能以xml(或XML、或Xml 等)开头。(xml 为关键字,所以不能重复)
    4. 不能包含空格。
    5. 名称中间不能包含冒号(:)。
    6. 一句话:像个正常人一样去写名称就行,不用关键字

 

在 XML 中有 5 个预定义的实体引用:

&lt;

<

小于

&gt;

>

大于

&amp;

&

和号

&apos;

'

省略号

&quot;

"

引号

  1. 注意:严格地讲,在 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;

   }

 

 

 

}

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_41992805/article/details/81104843