xml入门、解析、创建及规范
来源:互联网 发布:apk优化 编辑:程序博客网 时间:2024/05/21 04:20
HTML&XML
Html和XML都属于SGML(标准通用标记语言)语言分支
程序型标记-HTML(HTML5不属于SGML分支) XHTML
描述型标记-XML-(1998正式形成标准)
两者都由W3C维护
XML:Extensiable Markup Language可扩展标记语言,xml只代表数据本身,而不包含任何样式结构的呈现,所以也称之为一种数据描述语言
Xml作用:
1.实现不同平台之间的数据交换(webservice:soap协议)
2.Xml还可以用于一些应用程序的配置文件(框架,tomcat,servlet)
XML文档构成
一个标准的XML文档由3个部分构成
1.xml指令<?xml version=”1.0” encoding=”utf-8” standalone="yes"?>
2.文档类型定义<!DOCTYPE >
3.文档元素部分
Xml指令主要描述xml版本(目前为1.0),编码,文档类型定义是否是一个独立文件
文档类型定义(DTD,XSD):规范文档中允许出现的标记,属性,以及标记之间关系
文档的详细构成部分:标签,属性,文本
Xml元素:由一对标签以及标签对之间的内容构成
Xml标签:主要包含开始标记以及结束标记
Xml属性:属性通常定义在元素的开始标记中
CDATA:元数据
<![CDATA[
元数据具体内容
]]>
命名空间:namespace,防止标签的命名冲突
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="http://www.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
XML规范
Xml规范相对HTML来说相当严格
1.标记必须成对出现(空标签例外)
2.标签严格区分大小写
3.属性值必须使用双引号包含
4.属性值中不能包含特殊符号(<,&...)
5.xml支持类似html中实体(< > ")
6.注释代码不允许嵌套
7.一个XML文档中有且只有一对根节点
JSON&XML
AJAX:异步的javascript and XML
JSON:是一种轻量级的数据交换格式,实现不同平台之间的数据交换
XML解析
1.DOM解析
将需要被解析的文档完整的加载到内存中,解析为一颗倒置的文档树,可以通过解析器任意获取文档树中的节点
优点:适合解析较小的文档,解析速度快,可以任意搜索节点,并行搜索
缺点:一次性加载的整个文档,会消耗大量内存,无法解析过大的文件
2.SAX解析
基于事件驱动的方式以类似流媒体的方式进行解析,在读取到一部分内容之后立即开始解析,直到读取到文档结束标记后停止解析
优点:适合解析较大的文档,解析效率较快,一边读取一边解析
缺点:无法任意搜索节点,比较难以实现并行搜索
3.JDOM解析
JDOM的目的是成为java特定文档模型,它简化与xml的交互并且比使用DOM实现更快
4.DOM4J解析
DOM4J是一个非常优秀的java xml API,具有性能优异、功能强大和极端易用的特点
Android pull解析
案列分析
package com.softeem.xml.create;import java.io.File;import java.io.FileWriter;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class CreateXML {public static void main(String[] args) throws IOException {
//创建一个文档对象Document document = DocumentHelper.createDocument();
//创建根节点Element root = document.addElement("books");Element book = root.addElement("book").addAttribute("no", "123234");book.addElement("name").setText("恒大华府");book.addElement("author").setText("安徽分行的");book.addElement("price").setText("45.7");book.addElement("publish").setText("方法");OutputFormat fmt = new OutputFormat().createPrettyPrint();fmt.setEncoding("gbk");File file = new File("src/bk.xml");FileWriter fw = new FileWriter(file);XMLWriter writer = new XMLWriter(fw, fmt);writer.write(document);writer.flush();writer.close();}}<?xml version="1.0" encoding="gbk"?><books> <book no="123234"> <name>恒大华府</name> <author>安徽分行的</author> <price>45.7</price> <publish>方法的继承</publish> </book></books>
DOM解析package com.softeem.xml.parse;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class ParseByDOM {public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {//实例化一个解析工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //获取解析器对象DocumentBuilder builder = factory.newDocumentBuilder(); //解析文件并获取文档对象Document document = builder.parse(new File("src/userinfo.xml"));//根据元素的标签获取元素并去取出匹配第一个元素Node root = document.getElementsByTagName("users").item(0);NodeList list = root.getChildNodes();//System.out.println(node); for(int i = 0;i < list.getLength();i++){Node n = list.item(i);if("user".equals(n.getNodeName())){NamedNodeMap nnm = n.getAttributes();String id = nnm.getNamedItem("id").getNodeValue();System.out.println(id+"==");//继续搜索user节点的子节点NodeList user_child = n.getChildNodes();System.out.println(user_child.getLength());for(int j = 0;j < user_child.getLength();j++){Node c = user_child.item(j);if("name".equals(c.getNodeName())){String name = c.getTextContent();System.out.println(name+"姓名");}else if("sex".equals(c.getNodeName())){String sex = c.getTextContent();System.out.println(sex+"姓名");}else if("age".equals(c.getNodeName())){String age = c.getTextContent();System.out.println(age+"姓名");}else if("ismarray".equals(c.getNodeName())){String ismarray = c.getTextContent();System.out.println(ismarray+"姓名");}}}}}}SAX解析package com.softeem.xml.parse;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import com.softeem.xml.dto.Book;public class ParseBySAX extends DefaultHandler {public List<Book> books;private Book book;private String nowTag;@Overridepublic void startDocument() throws SAXException {System.out.println("开始解析");books = new ArrayList<>();}/** * uri:命名空间的uri地址 * localName:不带命名空间前缀的标签名称 * qName:包含命名空间的标签名 * attributes:元素中的属性列表 */@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {System.out.println("读取开始标记:"+qName);//记录当前标记nowTag = qName;if("book".equals(qName)){book = new Book();book.setNo(attributes.getValue("no"));}}@Overridepublic void characters(char[] c, int start, int length) throws SAXException {System.out.println("读取到文本节点:"+new String(c,start,length));String value = new String(c,start,length);//根据标记给值if("name".equals(nowTag)){book.setName(value);}else if("author".equals(nowTag)){book.setAuthor(value);}else if("price".equals(nowTag)){book.setPrice(value);}else if("publish".equals(nowTag)){book.setPublish(value);}//将节点置空nowTag = "";}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {System.out.println("读取到结束标记:"+qName);if("book".equals(qName)){books.add(book);book = null;}}@Overridepublic void endDocument() throws SAXException {System.out.println("解析结束");}public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {SAXParser parse = SAXParserFactory.newInstance().newSAXParser();ParseBySAX pbs = new ParseBySAX();parse.parse("src/bookinfo.xml",pbs);List<Book> list = pbs.books;System.out.println(list);}}DOM4J解析package com.softeem.xml.parse;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class ParseByDOM4J {public static void main(String[] args) throws DocumentException {// 创建dom4j解析器SAXReader reader = new SAXReader();// 解析文档Document document = reader.read(new File("src/bookinfo.xml"));//获取根节点Element root = document.getRootElement();//获取当前根节点下指定名称的子节点List<Element> list = root.elements("book");for (Element e : list) {String no = e.attributeValue("no");String name = e.element("name").getText();String author = e.element("author").getText();String price = e.element("price").getText();String publish = e.element("publish").getText();System.out.println(no);System.out.println(name);System.out.println(author);System.out.println(publish);System.out.println(price);System.out.println("============");}}}DOM4J_XPath解析package com.softeem.xml.parse;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class ParseByDOM4J_XPath {public static void main(String[] args) throws DocumentException {SAXReader reader = new SAXReader();Document document = reader.read(new File("src/bookinfo.xml")); //快速搜索books/book/name节点List<Node> list = document.selectNodes("books/book/name"); for(Node n:list){ String qname = n.getName(); String name = n.getText(); System.out.println(qname+"---"+name); } List<Node> list2 = document.selectNodes("books/book"); for(Node n2:list2){ //获取节点的指定属性 String no = n2.valueOf("@no"); System.out.println(no+"----"); }}}JDOM解析package com.softeem.xml.parse;import java.io.IOException;import java.util.List;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;public class ParseByJDOM {public static void main(String[] args) throws JDOMException, IOException {//创建解析器SAXBuilder builder = new SAXBuilder();//解析document对象Document document = builder .build("src/bookinfo.xml"); //获取文档的根节点document.getRootElement();Element root = document.getRootElement();//获取根节点的所有的List<Element> list = root.getChildren("book");for(Element e:list){String no = e.getAttributeValue("no");String name = e.getChild("name").getText();String author = e.getChild("author").getText();String publish = e.getChild("publish").getText();String price = e.getChild("price").getText();System.out.println(no);System.out.println(name);System.out.println(author);System.out.println(publish);System.out.println(price);System.out.println("============");}}}
- xml入门、解析、创建及规范
- XML的创建及解析
- xml创建及DOM解析
- Java xml创建及解析
- 使用CMarkup创建及解析XML文档
- 使用tinyxml创建及解析XML文件
- http协议与XML书写规范及解析技术
- 每日一得--dom4j创建xml及解析xml
- dom创建和解析及更新删除xml
- Hibernate配置文件创建及解析,hibernate.cfg.xml----Hibernate_0
- DOM4J 解析xml,创建xml
- python解析xml(创建xml)
- Dom4j创建XML,解析XML
- [XML]Dom创建,解析xml
- 创建和解析XML
- xml解析与创建
- xml解析与创建
- 解析 创建 xml
- springboot快速搭建
- Math 、 BigDecimal
- Spring的AOP
- 快速搭建springboot框架以及整合ssm+shiro+安装Rabbitmq和Erlang、Mysql下载与配置
- linux初学之ftp服务
- xml入门、解析、创建及规范
- ssh设置字段默认值
- redis shutdown (error) ERR Errors trying to SHUTDOWN. Check logs.
- 171108-函数作用域和存储特性学习【连续第十六天】
- 程序员的自我修养--可执行文件的装载与进程
- 剑指offer 二维数组的查找
- 位操作算法基本操作1
- 让你的 WordPress 网站更安全的5 个方法
- java String[] args理解