【前面的话】

学习过程中还是效率不够高,老是容易注意力不集中,着急啊。不能在这样了,要好好学习,好好努力。

学习过程中的小知识点总结,基础知识,选择阅读

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. http://download.csdn.net/detail/shizhending/4067649#comment

【后面的话】

学习总会有学不下去的时候,没事,好好休息休息,再接着来。加油吧,少年。

分享:《许三观卖血记》——记忆深刻。

  1. 一乐吃不到1元7角的一碗面,一个人在哭泣的时候。
  2. 许三观为了给一乐治疗肝炎连续卖血。
  3. 当许三观自己的血卖不出。生活的状况也不需要他再去卖血,他哭泣的说:以前的生活灾难,都是靠我卖血度过的,那么现在我的血卖不出了,以后生活的灾难我们怎么度过。

——TT

Java学习笔记(十)——xml的更多相关文章

  1. JAVA学习笔记 -- 读写XML

    XML是一种可扩展标记语言 以下是一个完整的XML文件(也是下文介绍读写XML的样本): <? xml version="1.0" encoding="UTF-8& ...

  2. Java学习笔记十五:Java中的成员变量和局部变量

    Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...

  3. Java学习笔记十九:Java中的访问控制修饰符

    Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...

  4. Java学习笔记十八:Java面向对象的三大特性之封装

    Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态   二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...

  5. Java学习笔记十六:Java中的构造方法

    Java中的构造方法 1.使用new+构造方法 创建一个新的对象: 2.构造方法是定义在Java类中的一个用来初始化对象的方法: 3.构造方法与类同名且没有返回值: 4.语法格式: public 构造 ...

  6. Java学习笔记十四:如何定义Java中的类以及使用对象的属性

    如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...

  7. Java学习笔记十二:Java中方法的重载

    Java中方法的重载 什么是方法的重载呢? 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方法名称都为 s ...

  8. Java学习笔记十:Java的数组以及操作数组

    Java的数组以及操作数组 一:什么是数组: 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩 数组中的元 ...

  9. Java学习笔记十

    网络编程: 一.osi和TCP协议对照: 二.通讯三要素: 三.InetAddress对象简述: import java.net.InetAddress; import java.net.Unknow ...

  10. Java学习笔记(十)面向对象---接口

    理解 初期理解 可以认为接口是一个特殊的抽象类.当接口中的方法都是抽象的,那么该类可以通过接口的形式来表示. class用于定义类 interface用于定义接口 格式特点 接口中常见定义:常量,抽象 ...

随机推荐

  1. Windows不能用鼠标双击运行jar文件

    Java应用程序jar文件可以由 JVM(Java虚拟机)直接执行,只要操作系统安装了JVM便可以运行作为Java应用程序的jar文件.可是,很多朋友遇到一个难题,那就是下载了jar文件以后在Wind ...

  2. 第三方库升级Nginx

    通过PPA方式,来升级Nginx 1. 添加PPA sudo add-apt-repository ppa:nginx/stable sudo apt-get updatesudo apt-get u ...

  3. Java并发之同步原语

    volatile: 定义:Java编程语言允许线程访问共享变量,为了确保共享变量内被准确和一致性地更新,线程应该确保通过排它锁单独获得这个变量.根据volatile的定义,volatile有锁的语义. ...

  4. git如何删除本地所有未提交的更改

    stash很好用,至少不会影响 .gitignore 里面的不跟踪的文件: git add . && git stash && git stash drop ===== ...

  5. 解决在linux安装网易云音乐无法点击图标打开

    一下内容转载自:https://blog.csdn.net/Handoking/article/details/81026651 似乎linux下无法直接打开网易云音乐的原因是图标自带的启动脚本中没有 ...

  6. [Luogu 1160] 队列安排

    Luogu 1160 队列安排 链表H2O H2O H2O模板. 太久不写链表,忘干净了,竟调了半个晚上. 保留备用. #include <cstdio> #include <cst ...

  7. jedis,spring-redis-data 整合使用,版本问题异常

    jedis,spring-redis-data 整合使用,版本不匹配的时候经常会报一些异常,例如1: java.lang.NoClassDefFoundError: org/springframewo ...

  8. 通过gitlabAPI批量创建用户

    上午服务器领导通知我给服务器所有同事添加gitlab账号,服务器总共67个人,这要是一个一个在页面添加,我得累死,是否有其他的办法呢?有问题找google,果然是可以通过gitlab的API批量添加的 ...

  9. 获取数据源数据的实现---Architecting Android

    UserRepository,这个接口,描述了Repository提供给用户的功能就是getUsers,getUser(ID).用户只管使用,其它细节无需理会. /** * Interface tha ...

  10. 一个App架构例子分析--UI层使用MVP模式;各层之间使用Otto实现通信

    一.这个App整体的架构划分: 分为四大模块:   1.app模块 2.common模块 3.domain模块 4.model模块     app模块的依赖: dependencies {     c ...