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解析
SAX解析
javabean封装XML数据
dom4j解析所有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(); } }
相关文章推荐
- XML - 可扩展标记语言 (Extensible Markup Language)
- XML - 可扩展标记语言 (Extensible Markup Language)
- XML(Extensible Markup Language)可扩展标记语言
- XML(Extensible Markup Language 可扩展的标记语言)简述及读取
- 可扩展标记语言XML(Extensible Markup Language)
- XML(eXtensible Markup Language)即可扩展标记语言
- XSL是指可扩展样式表语言 (EXtensible Stylesheet Language)
- XSL(EXtensible Stylesheet Language)它是指可扩展样式表语言
- div+css - 其他HTML问题 - Vector Markup Language (VML): - 向量标记语言
- XSL是指可扩展样式表语言 (EXtensible Stylesheet Language)
- XML(eXtensible Markup Language)文件的解析
- xml 可扩展的标记语言
- C#-WebForm-LinQ(一)-LinQ:语言集成查询(Language Integrated Query)-增删改查、属性扩展
- 可扩展的标记语言XML
- XML(EXtensible Markup Language)学习
- XML(eXtensible Markup Language)文件的解析
- XML -可扩展标记语言
- 保存查看翻译:Thrift: Scalable Cross-Language Services Implementation中文翻译(Thrift:可扩展的跨语言服务实现)
- 【Android学习】XML(Extensible Markup Language,可扩展标记语言)
- XML(Extenxible Markup Language)可扩展标记语言,DTD(Document Type Definition)文档类型定义