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用于定义接口 格式特点 接口中常见定义:常量,抽象 ...
随机推荐
- JQuery选择符的理解与应用
JQuery强大的选择符可以让我们获得页面中任何元素进行操作,并且使用简单方便,可读性强.本章内容根据本人在开发中常用到的选择符作为例子来进行讲解,如有更多常用的简单的例子可回复提供,参与讨论,一起学 ...
- k好数 数位dp
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...
- bzoj 1564 [NOI2009]二叉查找树 区间DP
[NOI2009]二叉查找树 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 906 Solved: 630[Submit][Status][Discu ...
- JS设计模式之装饰者模式
装饰者模式概述 在不改变原对象的基础上,通过对其进行包装拓展(添加属性或者方法)使原有对象可以满足用户更复杂的需求 实际需求 在已有的代码基础上,为每个表单中的input默认输入框上边显示一行提示文案 ...
- C++11新特性,对象移动,右值引用,移动构造函数
C++11新标准中的一个最主要的特性就是移动而非拷贝对象的能力.接下来简要介绍一下相关概念. 右值引用 所谓右值引用就是必须绑定到右值的引用.通过 && 而不是 & 来获得右值 ...
- LightOJ 1013 - Love Calculator LCS
题意:找一个串使给出的两个串都是它的子串,要求最短,求出最短长度,以及种类数. 思路:可以想到,当两个子串a,b拥有最长的公共子串为LCS时,那么可以求出的最短的串为lena+lenb-LCS. 那么 ...
- MyBatis框架的使用及源码分析(十一) StatementHandler
我们回忆一下<MyBatis框架的使用及源码分析(十) CacheExecutor,SimpleExecutor,BatchExecutor ,ReuseExecutor> , 这4个Ex ...
- 注意for循环中变量的作用域
for e in collections: pass 在for 循环里, 最后一个对象e一直存在在上下文中.就是在循环外面,接下来对e的引用仍然有效. 这里有个问题容易被忽略,如果在循环之前已经有一个 ...
- Vs2013 agent 安装
1. 在windows 2008 R2上安装vs2013 agents需要满足: 1) .net 3.5 2) sp1补丁包(同windows7 sp1) 2. 安装vs2013 agents 步骤如 ...
- [hdu2460]network(依次连边并询问图中割边数量) tarjan边双联通分量+lca
题意: 给定一个n个点m条边的无向图,q个操作,每个操作给(x,y)连边并询问此时图中的割边有多少条.(连上的边会一直存在) n<=1e5,m<=2*10^5,q<=1e3,多组数据 ...