
XML
SGML : 标准通用置标语言 Standard Generailzed Markup Language
XML
HTML : 超文本置标语言 HyperText Markup Language
XML : 可扩展标记语言
标记 : 指计算机所能理解的信息符号
XML 的优点 :
① 可扩展的标记
② 数据共享和重用
③ XML 遵循严格的语法要求
④ XML 便于不同系统之间信息的传输
⑤ 数据存储格式不受显示格式的制约
⑥ 包含语义的文档格式
⑦ 对面向对象(OOP)的支持 DOM
⑧ 内容与形式的分离
⑨ 具有较好的保值性
缺点:
① 语义表达能力上略显不足
② XML 的有些技术尚未形成统一的标准
③ 应用程序\浏览器对XML 的支持也是有限的
基本格式 :<标记名></标记名>
字符: > ---> > < ---> < & ---> &
" ---> " , ---> ' 空格 --->
XML 和 HTML 的主要区别:
XML 是被设计用来描述数据的,重点是:什么是数据,如何存放数据
HTML 是被设计用来显示数据的,重点是:显示数据以及如何更好地显示数据
XML 声明:
<?xml version = "XML的版本号" encoding = "采用的编码标准" standalone = "no"?>
处理指令:
<?处理指令名 处理指令信息>
DOM解析
DOM:是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件
或 将xml以树结构的方式一次性加载进内存,易用,修改方便,但是更占内存。不适应于大文件,一般情况下用它即可应付大多数应用。
DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合
DOM 解析器需要将整个文档解析一遍,并将解析结果以树型结构保存到内存中( 这棵树被称为DOM 树),然后才把程序
的控制权交给用户。这导致了DOM 方式不够灵活,需要占用大量的资源。
DOM xml文件的创建:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//获取 DocumentBuilderFactory 的新实例。
DocumentBuilder db = dbf.newDocumentBuilder();//使用当前配置的参数创建一个新的 DocumentBuilder 实例。
Document doc = db.newDocument();//获取 DOM Document 对象的一个新实例来生成一个 DOM 树。
Element root = doc.createElement("root"); //创建根结点
document.appendChild(root); //追加嵌套 setTextContent()、setAttribute() 加值
TransformerFactory tf = TransformerFactory.newInstance();// 获取 TransformerFactory 的新实例。
Transformer t = tf.newTransformer();//此抽象类的实例能够将源树转换为结果树。
t.transform(new DOMSource(root), new StreamResult("xml文件路径"));
DOM xml文件的读取:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("xml文件路径");
NodeList array = document.getChildNodes();
for (int i=0;i<array.getLength();i++) {
Node cla = array.item(i);
NodeList stus = cla.getChildNodes();
for (int j=0;j<stus.getLength();j++) {
Node stu = stus.item(j);
NamedNodeMap arrs = stu.getAttributes();
if (stu.getNodeName().equals("student")) { //过滤掉#test
for(int k = 0;k<arrs.getLength();k++){
Node arr = arrs.item(k);
System.out.println(arr.getNodeName()+" "+arr.getNodeValue());
}
}
}
}
Dom4j 解析
查询:
SAXReader sr = new SAXReader();
Document doc = sr.read("xml文件路径");
List<DefaultElement> list = doc.selectNodes("节点/子节点");
增加:
SAXReader sr = new SAXReader();
Document doc = sr.read("xml文件路径);
List<DefaultElement> list = doc.selectNodes("节点");
DefaultElement de = list.get(0);
Element ele = de.addElement("要增加的节点");
ele.addAttribute("要增加的属性名","要增加的值");
ele.addText("增加文本值");
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
write.write(doc); write.close();
修改:
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read("xml文件路径");
List<DefaultElement> list = doc.selectNodes("节点");
DefaultElement de = list.get(0);
List<Element> list2 = de.elements();
for (Element e : list2) {
if (e.attributeValue("属性名").equals("属性值")) {
Element eleName = e.element("属性名");
eleName.setText("新值");
}
}
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
write.write(doc); write.close();
删除:
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read("xml文件路径");
List<DefaultElement> list = doc.selectNodes("节点");
DefaultElement de = list.get(0);
List<Element> list2 = de.elements();
for (Element e : list2) {
if (e.attributeValue("属性名").equals("属性值")) {
de.remove(e);
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
write.write(doc); write.close();
将文档写入XML文件:
① 文档中全英文,不设置编码,直接写入
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
write.write(document); write.close();
② 文档中含有中文,设置编码格式再写入
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("指定编码格式");
XMLWriter write = new XMLWrite(new FileOutputStream("xml文件路径"));
write.write(document); write.close();
创建XML文件 :
String fileName = "路径";
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("根节点");
XMLWriter writer = new XMLWriter(new File(fileName));
writer.write(doc);
writer.close();
将字符串转化为 XML 文件 :
String text = "<cla><stu> 属性 </stu></cla>";
Document doc = DocumentHelper.parseText(text);
- JAVA基础部分复习(一、8中基础类型,以及String相关内容)
以下是关于java中8种基本类型的介绍说明: package cn.review.day01; /** * java基础复习,8种数据类型 * (byte,short,long,int,double, ...
- JAVA基础-XML的解析
一.XML的概述 XML的全名为可扩展标记语言(Extensible Markup Language),XML的作用为:1.传输,2.存取数据,3.软件的配置文件.传输现在都用更轻量的Json,而存储 ...
- JAVA基础部分复习(七、JAVA枚举类型使用)
/** * java中的枚举 * 枚举(enum),是指一个经过排序的.被打包成一个单一实体的项列表.一个枚举的实例可以使用枚举项列表中任意单一项的值. * 枚举在各个语言当中都有着广泛的应用,通常用 ...
- Java基础再复习(继承、多态、方法内部类**、HashMap用法**、参数传递**)
###继承: package com.shiyan; public class Animal { public int legNum; //动物四肢的数量 //类方法 public void bark ...
- JAVA基础部分复习(六、常用关键字说明)
/** * JAVA中常用关键字复习 * final * finalize * finally * * @author dyq * */ public class KeyWordReview exte ...
- JAVA基础部分复习(二、集合类型)
对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...
- Java基础知识复习(二)
Java 重写(Override)与重载(Overload) 重写 是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变,属于编译时多态.即外壳不变,核心重写! 重写的好处在于子 ...
- java基础 xml 使用dom4j解析 xml文件 servlet根据pattern 找到class
package com.swift.kaoshi; import java.io.File; import java.util.List; import java.util.Scanner; impo ...
- JAVA基础知识复习小结
集合 Set集合 Set集合的基本特征是元素不允许重复.HashSet不保存元素顺序,LinkedHashSet用链表保持元素的插入顺序,TreeSet可定制排序规则. HashSet的底层是用Has ...
随机推荐
- 【Openvpn】iOS OpenVPN客户端设置指南(适用iPhone/iPad)
适用于iPhone/iPad/这些iOS设备.之前iOS使用OpenVPN是需要越狱的,并且是付费第三方应用. 去年开始OpenVPN官方推出了iOS客户端就好用多了,免费也无需越狱. 说明:如果是新 ...
- 使用setInterval函数改变网页背景的颜色
var icolor=0; var iNum=256; var iID=setInterval(setbgColor, 500); function setbgColor() { body.backg ...
- PHP通过映射类查找类所在文件
$reflectObj = new ReflectionClass(类名); $file_name = $reflectObj->getFileName(); var_dump($file_na ...
- C#中TransactionScope的使用方法和原理(摘)
出自51CTO博客:http://cnn237111.blog.51cto.com/2359144/1271600 在.net 1.1的时代,还没有TransactionScope类,因此很多关于事务 ...
- 拼凑的宿主-host
开发两年之久,竟然不知道host这个词是什么意思.前些天有幸遇到了,就跟别人请教了.今天理絮一下.总比不知道强吧. 白话来说宿主就是一些框架运行机制运行时需要依赖的平台. 例如web开发常用的IIS, ...
- sqlServer游标的使用
USE [PatPD1]GO/****** Object: UserDefinedFunction [dbo].[fun_GetConditionInner] Script Date: 201 ...
- (0!=0)==true? 记一个匪夷所思的问题
最近换了份工作,公司的开发框架是基于SSH自己搭建的.这个问题是我在解决一个需求的时候遇到的,其实解决这个疑惑的过程也就是读框架源码的过程,特此记录一下. 问题:ba.getState()!=CbBa ...
- Thrift笔记(四)--Thrift client源码分析
thrift文件 namespace java com.gxf.demo namespace py tutorial typedef i32 int // We can use typedef to ...
- asp: AJAX Database
<% @LANGUAGE="VBSCRIPT" CODEPAGE="65001" %> <!DOCTYPE html PUBLIC " ...
- HihoCoder#1279 : Rikka with Sequence(dp 枚举子集 二进制 神仙题)
题意 题目链接 Sol 不愧是dls出的比赛啊,265个交了题的人只有8个有分Orz 做完这题,,感觉自己的位运算dp姿势升华了... 首先最裸的dp应该比较好想,设\(f[i][j][k]\)表示前 ...