2.XML:Extensible Markup Language可扩展标记语言
来源:互联网 发布:工商管理网络课程 编辑:程序博客网 时间:2024/06/05 10:03
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文档,得到代表文档的documentDocument 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 {@Overridepublic 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);}}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {System.out.println(new String(ch ,start , length));}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {System.out.println("</"+qName+">");} @Overridepublic void setDocumentLocator(Locator locator) {// TODO Auto-generated method stub}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stub}@Overridepublic void startPrefixMapping(String prefix, String uri) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endPrefixMapping(String prefix) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void processingInstruction(String target, String data) throws SAXException {// TODO Auto-generated method stub}@Overridepublic 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;@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);currentTag = qName;if("name".equals(currentTag)) {currentNum++;}}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);if("name".equals(currentTag)&¤tNum == needNum) {System.out.println(new String(ch,start,length));}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.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;@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {currentTag = qName;if("student".equals(currentTag)) {person = new Person();}}@Overridepublic 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));}}@Overridepublic 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);//为李四再添加一个成绩150student.addElement("grade").setText("150");XMLWriter out = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/NewFile.xml"),"UTF-8"));out.write(document);out.close();}}
- 2.XML:Extensible Markup Language可扩展标记语言
- XML(Extensible Markup Language) 可扩展标记语言
- XML - 可扩展标记语言 (Extensible Markup Language)
- XML - 可扩展标记语言 (Extensible Markup Language)
- 可扩展标记语言XML(Extensible Markup Language)
- XML(Extensible Markup Language)可扩展标记语言
- XML即可扩展标记语言(Extensible Markup Language)
- XML(Extensible Markup Language 可扩展的标记语言)简述及读取
- 【Android学习】XML(Extensible Markup Language,可扩展标记语言)
- XML—可扩展标记语言(eXtensible Markup Languae)
- Extensible Markup Language (XML)
- XML(Extensible Markup Language)基础
- XML(Extenxible Markup Language)可扩展标记语言,DTD(Document Type Definition)文档类型定义
- Extensible Markup Language (XML) 1.0 (Third Edition)
- XML是eXtensible Markup Language的缩写。
- XML是eXtensible Markup Language的缩写。
- XML是eXtensible Markup Language的缩写
- XML是eXtensible Markup Language的缩写。
- Linux SysV 自定义服务脚本
- STM32 CUBE 串口收发
- 用Fuel部署OpenStack的时候可能遇到的问题及部分解决办法
- MySql学习之查询
- Java SE、 Java EE、 Java ME三者的区别
- 2.XML:Extensible Markup Language可扩展标记语言
- MySQL授权远程操作
- bzoj 4057(状压dp)
- Android Studio 是谷歌基于IntelliJ IDEA开发的安卓开发工具,有点类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调
- js(网页,代码,canvas)转图片
- 数据结构 P28-29 算法实现 线性表的链式存储结构——链表的查找、插入与删除
- GitHub团队协同开发流程
- 同名参数后台接受
- CEF3嵌入MFC 工程(2171)