Java学习笔记(十)——xml
【前面的话】
学习过程中还是效率不够高,老是容易注意力不集中,着急啊。不能在这样了,要好好学习,好好努力。
学习过程中的小知识点总结,基础知识,选择阅读。
【xml定义】
定义:可扩展标记语言(英语:eXtensible Markup Language,简称: XML),是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。
用途:XML设计用来传送及携带数据信息,不用来表现或展示数据,HTML语言则用来表现数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。
1. 丰富文件(Rich Documents)- 自定文件描述并使其更丰富
- 属于文件为主的XML技术应用
- 标记是用来定义一份资料应该如何呈现
2. 元数据(Metadata)- 描述其它文件或网络资讯
- 属于资料为主的XML技术应用
- 标记是用来说明一份资料的意义
3. 配置文档(Configuration Files)- 描述软件设置的参数
xml和html区别:(在java核心技术中有如下的说明:)
- 与html不同,xml是大小写敏感的
- 在html中,如果上下文可以分清哪里是段落或列表的结尾,那么结束标签就可以省略,但是在xml中结束标签式绝对不能省略的。
- 在xml中,只有一个标签而没有相对应的结束标签的元素必须以/结尾,比如<img src=”coffeecup.pen”/>。这样,解析器就知道不需要查找</img>标签了。
- 在xml中,属性值必须用引号括起来,在html中,引号可有可无。如<applet code =”MyApplet.class”width=300 height=300>对于html是合法的,但是对于xml是不合法的。在xml中必须使用width=”300”。
- 在html中属性名可以没有值,例如<input type=”radio” name=”language” value=”Java” checked>。但是在xml中,所有属性必须都有属性值。比如checked=”true”或者checked=”checked”
举例:(这个想起了在初中的时候,上课总是和同学传字条,下面就是用xml和同学一起传纸条的内容)
<?xml version="1.0" encoding=”UTF-8”?>
<小纸条>
<收件人>大头</收件人>
<发件人>强哥</发件人>
<主题>吃饭</主题>
<具体內容>下课等我,我们一起去吃饭? </具体內容>
</小纸条>
这XML文档仅是纯粹的信息标签,这些标签意义的展开依赖于应用它的程序。
【四种操作】
下面定义xml 文档,然后通过四种方法对于xml文档进行操作。
四种操作都是对于xmltest.xml文档的操作,所以xmltest.xml文档时共用的。
- xmltest.xml
<?xml version="1.0" encoding="UTF-8"?>
<RESULT>
<VALUE>
<NO>陕A1234</NO>
<ADDR>西安</ADDR>
</VALUE>
<VALUE>
<NO>陕C1234</NO>
<ADDR>宝鸡</ADDR>
</VALUE>
</RESULT>
1. DOM
- XmlTest.java
import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*; public class XmlTest{
public static void main(String arge[]){
long lasting =System.currentTimeMillis();
try{
File f=new File("xmltest.xml");
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList nl = doc.getElementsByTagName("VALUE");
for (int i=0;i<nl.getLength();i++){
System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
} }catch(Exception e){
e.printStackTrace();
}
}
}
- 运行结果
车牌号码:陕A1234车主地址:西安
车牌号码:陕C1234车主地址:宝鸡
2. JDOM(需要导入jdom.jar包)
- XmlTest.java
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*; public class XmlTest {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("xmltest.xml"));
Element foo = doc.getRootElement();
List allChildren = foo.getChildren();
for(int i=0;i<allChildren.size();i++) {
System.out.println("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText());
System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText());
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
- 运行结果:
车牌号码:陕A1234
车主地址:西安
车牌号码:陕C1234
车主地址:宝鸡
3. DOM4J(需要导入dom4j.jar包)
- XmlTest.java
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*; public class XmlTest {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
File f = new File("xmltest.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
Element foo;
for (Iterator i = root.elementIterator("VALUE");i.hasNext();){
foo = (Element)i.next();
System.out.println("车牌号码:" + foo.elementText("NO"));
System.out.println("车主地址:" + foo.elementText("ADDR"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 运行结果:
车牌号码:陕A1234
车主地址:西安
车牌号码:陕C1234
车主地址:宝鸡
4. SAX(还没有完全理解清楚,存在问题,在输出的时候,会把xml文档中</NO>后面的内容页输出)
- XmlTest.java
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import java.util.Stack; public class XmlTest extends DefaultHandler {
Stack tags = new Stack();
public XmlTest() {
super();
}
public void characters(char ch[], int start, int length) throws SAXException {
String tag = (String) tags.peek(); //查看栈顶对象而不删除它
if (tag.equals("NO")) { //如果栈顶多想是"NO"输出
System.out.println("车牌号码:" +new String(ch, start, length));
}
if (tag.equals("ADDR")) {//如果栈顶多想是"ADDR"输出
System.out.println("地址:" + new String(ch, start, length));
}
}
public void startElement(String url,String localName,String qName,Attributes attrs) {
tags.push(qName);
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
XmlTest reader = new XmlTest();
sp.parse(new InputSource("xmltest.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");
}
}
- 运行结果:
车牌号码:陕A1234
车牌号码: 地址:西安
地址: 地址: 车牌号码:陕C1234
车牌号码: 地址:宝鸡
地址: 地址:123
地址: 地址: 运行时间:51毫秒
【参考资料】
【后面的话】
学习总会有学不下去的时候,没事,好好休息休息,再接着来。加油吧,少年。
分享:《许三观卖血记》——记忆深刻。
- 一乐吃不到1元7角的一碗面,一个人在哭泣的时候。
- 许三观为了给一乐治疗肝炎连续卖血。
- 当许三观自己的血卖不出。生活的状况也不需要他再去卖血,他哭泣的说:以前的生活灾难,都是靠我卖血度过的,那么现在我的血卖不出了,以后生活的灾难我们怎么度过。
——TT
Java学习笔记(十)——xml的更多相关文章
- JAVA学习笔记 -- 读写XML
XML是一种可扩展标记语言 以下是一个完整的XML文件(也是下文介绍读写XML的样本): <? xml version="1.0" encoding="UTF-8& ...
- Java学习笔记十五:Java中的成员变量和局部变量
Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...
- Java学习笔记十九:Java中的访问控制修饰符
Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...
- Java学习笔记十八:Java面向对象的三大特性之封装
Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态 二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...
- Java学习笔记十六:Java中的构造方法
Java中的构造方法 1.使用new+构造方法 创建一个新的对象: 2.构造方法是定义在Java类中的一个用来初始化对象的方法: 3.构造方法与类同名且没有返回值: 4.语法格式: public 构造 ...
- Java学习笔记十四:如何定义Java中的类以及使用对象的属性
如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...
- Java学习笔记十二:Java中方法的重载
Java中方法的重载 什么是方法的重载呢? 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方法名称都为 s ...
- Java学习笔记十:Java的数组以及操作数组
Java的数组以及操作数组 一:什么是数组: 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩 数组中的元 ...
- Java学习笔记十
网络编程: 一.osi和TCP协议对照: 二.通讯三要素: 三.InetAddress对象简述: import java.net.InetAddress; import java.net.Unknow ...
- Java学习笔记(十)面向对象---接口
理解 初期理解 可以认为接口是一个特殊的抽象类.当接口中的方法都是抽象的,那么该类可以通过接口的形式来表示. class用于定义类 interface用于定义接口 格式特点 接口中常见定义:常量,抽象 ...
随机推荐
- iOS开发ARC机制下的内存管理技术要点
转载一篇: iOS开发ARC内存管理技术要点.ARC内存管理原则总结.iOS ARC内存管理总结 ARC内存管理机制 (一)ARC的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...
- HDU 5640
King's Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- shell中的$* $@
shell中$*与$@的区别 关于$* 和 $@的 一点 认识 同是菜鸟一起学习 $* 所有的位置参数,被作为一个单词. 注意:"$*"必须被""引用. $@ ...
- HDU1254 bfs
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- WPF 分辨率无关性原理
WPF在计算窗口尺寸大小时使用的是系统的DPI设置.WPF窗口以及窗口中所有的元素都是使用设备无关单位度量.一个设备无关单位被定义为1/96英寸. [物理单位尺寸]=[设备无关单位尺寸]*[系统DPI ...
- CCF-20170901
试题编号: 201709-1 试题名称: 打酱油 时间限制: 1.0s 内存限制: 256.0MB 问题描述 小明带着N元钱去买酱油.酱油10块钱一瓶,商家进行促销,每买3瓶送 ...
- webpack插件url-loader使用规范
其实说到性能优化,他的范围太广了,今天我们就只聊一聊通过webpack配置减少http请求数量这个点吧. 简单说下工作中遇到的问题吧,我们做的一个项目中首页用了十多张图片,每张图片都是一个静态资源,所 ...
- 【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛
[题意]n头牛,其中最高h.给定r组关系a和b,要求满足h[b]>=h[a]且a.b之间都小于min(h[a],h[b]),求第i头牛可能的最高高度. [算法]差分 [题解]容易发现r组关系只能 ...
- 【BZOJ】1709: [Usaco2007 Oct]Super Paintball超级弹珠
[算法]模拟 [题解]O(n^2)预处理横线(y),纵线(x),主对角线(y-x+n),副对角线(x+y). 然后n^2枚举每个点.
- Object的公用方法们
如图所示,Object一共有10种方法: 下面详细描述: 1.public Object() 方法,默认构造函数方法,当新建一个Object对象的时候,调用这个方法向堆区申请一片内存: 2.priva ...