您的位置:首页 > 其它

2.XML:Extensible Markup Language可扩展标记语言

2017-09-29 19:27 357 查看
1.XML出现的根本目标:描述在显示生活中有关系的数据

2.应用: (1)保存有关系的数据
(2)软件配置文件,描述程序模块间关系

一:语法:

1.文档声明

<?xml version="1.0" encoding="utf-8" standalone="no"?>

standalone用来说明文档是否独立

2.元素:XML元素是指XML文件中出现的标签,一个标签分为开始标签和结束标签

3.属性:<input name = "text'> 属性值一定要用单引号或双引号

4.注释:<!--注释-->

5.CDATA区:不想让解析引擎执行的内容可以放在CDATA区域,XML将原封不动的输出

语法:<![CDATA[内容]]>

6.转义字符

& &< < > >

" "' &apos

二:约束

1.什么是XML约束:在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束

2.常用的XML约束技术 (1)XML DTD (2) XML Schema

3.DTD约束:文档类型定义 PCDATA-- 字符数据

<!ELEMENT 书架 (书+) >

<!ELEMENT 书 (书名,作者,售价) >

<!ELEMENT 书名 (#PCDATA)>

<!ELEMENT
作者 (#PCDATA)>

<!ELEMENT
售价 (#PCDATA)>

DTD校验:使用Eclips校验

(1)引用DTD约束

XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:

*当引用的文件在本地时,<!DOCTYPE 文档根节点 SYSTEM "book.dtd">

*当引用文件时一个公共的文件,<!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL">

(2)元素定义

<!ELEMENT 元素名称 元素类型>

元素类型可以是元素内容或类型,如果为元素的内容,则要用()括起来

<!ELEMENT 书架 ANY > 任意类型

括号内的元素逗号分割,表示内容出现顺序必须与声明时一致

用 | 分割,表示多个只能出现一个

+:一次或多次(书+)

?:0次或一次(书?)

*:0次或多次(书*)

(书)书必须出现一次

(3)属性定义

<!ATTLIST 页面作者

姓名 CDATA #IMPLIED

年龄 CDATA #FIXED

联系信息 CDATA #REQUIRED

>

#REQUIRED 必须设置该属性

#IMPLIED 可以设置也可以不设置

#FIXED说明该属性的取值固定为一个值

(3)实体定义

实体分为 引用实体和参数实体

引用实体主要在XML我能当中被应用

语法格式:<!ENTITY 实体名称 "实体内容">

引用方式:&实体名称

参数实体被DTD文件自身使用

语法格式:<!ENTITY %实体名称 "实体内容">

医用方式:%实体名称

三.XML解析------DOM和SAX

DOM和SAX解析方式的区别?

1.DOM解析的优点是对文档crub(创建读更新删除)比较方便,缺点是占用内存比较大

2.SAX解析的优点是占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的crud

XML解析开发包Jaxp(sun) Jdom dom4j

使用JAXP对XML文档进行DOM解析

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class T1 {

public static void main(String[] args) throws Exception {
//1.得到某个标签的值
//创建工厂
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
//得到DOM解析器
DocumentBuilder bui = fac.newDocumentBuilder();
//解析XML文档,得到代表文档的document
Document doc = bui.parse("src/NewFile.xml");

NodeList list = doc.getElementsByTagName("a1");
Node node1 = list.item(0);
String content = node1.getTextContent();
System.out.println(content);
//2.得到所有的标签
Node root = doc.getElementsByTagName("soft").item(0);
list(root);
//3.得到单个标签的属性
Element china = (Element)doc.getElementsByTagName("a1").item(0); //此处强转为Element是因为
//Node只有getAttributes获取全部属性
String a1 = china.getAttribute("name");
System.out.println(a1);

}
private static void list(Node node) {
if(node instanceof Element)
System.out.println(node.getNodeName());
NodeList nl = node.getChildNodes();
for(int i = 0;i<nl.getLength();i++) {
Node child = nl.item(i);
list(child);
}

}

}


SAX解析

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class sax解析 {

public static void main(String[] args) throws Exception{
//创建解析工厂   得到解析器    得到读取器
XMLReader reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();

//设置内容处理器
reader.setContentHandler(new tagValueHandler());

reader.parse("src/NewFile.xml");

}

}
//得到XML文档的所有内容
class ListHander implements ContentHandler {
@Override
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
System.out.println("<"+qName+">");
for(int i=0;i<atts.getLength()&&atts!=null;i++) {
String attName = atts.getQName(i);
String attValue = atts.getValue(i);
System.out.println(attName + "=" + attValue);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.println(new String(ch ,start , length));

}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("</"+qName+">");

}

@Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub

}

@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void startPrefixMapping(String prefix, String uri) throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void processingInstruction(String target, String data) throws SAXException {
// TODO Auto-generated method stub

}

@Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub

}

}
//获取指定标签的内容
class tagValueHandler extends DefaultHandler{
private String currentTag ;
private int needNum = 2;
private int currentNum = 0;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
currentTag = qName;
if("name".equals(currentTag)) {
currentNum++;
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
if("name".equals(currentTag)&¤tNum == needNum) {
System.out.println(new String(ch,start,length));
}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
currentTag = null;
}

}


javabean封装XML数据

import java.awt.List;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class T1 {

public static void main(String[] args) throws Exception{
XMLReader read = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
BeanListHandle bean = new BeanListHandle();
read.setContentHandler(bean);
read.parse("src/NewFile.xml");

ArrayList<Person> al = bean.getList();
System.out.println(al.get(0));

}

}

class BeanListHandle extends DefaultHandler{
String currentTag;
ArrayList list = new ArrayList();
Person person;

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
currentTag = qName;
if("student".equals(currentTag)) {
person = new Person();

}

}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if("name".equals(currentTag)) {
person.setName(new String(ch,start,length));
}
if("location".equals(currentTag)) {
person.setLocation(new String(ch,start,length));
}
if("grade".equals(currentTag)) {
person.setGrade(new String(ch,start,length));
}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {

if("student".equals(currentTag)) {
list.add(person);
person = null;
}
currentTag = null;
}

public ArrayList getList() {
return list;
}

}


dom4j解析所有XML文档

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStreamWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class T1 {

public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/NewFile.xml"));

//读
Element root = document.getRootElement();
Element student = (Element)root.elements("student").get(1);
String name = student.element("name").getText();
String attr = student.attributeValue("idcard");
System.out.println(name);
System.out.println(attr);

//为李四再添加一个成绩150
student.addElement("grade").setText("150");

XMLWriter out = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/NewFile.xml"),"UTF-8"));
out.write(document);
out.close();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: