zoukankan      html  css  js  c++  java
  • 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
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <RESULT>
     3   <VALUE>
     4      <NO>陕A1234</NO>
     5      <ADDR>西安</ADDR>
     6   </VALUE>
     7    <VALUE>
     8      <NO>陕C1234</NO>
     9      <ADDR>宝鸡</ADDR>
    10   </VALUE>
    11 </RESULT>
    View Code

    1. DOM

    • XmlTest.java
     1 import java.io.*; 
     2 import java.util.*; 
     3 import org.w3c.dom.*; 
     4 import javax.xml.parsers.*; 
     5 
     6 public class XmlTest{ 
     7     public static void main(String arge[]){
     8         long lasting =System.currentTimeMillis();
     9         try{
    10             File f=new File("xmltest.xml"); 
    11             DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 
    12             DocumentBuilder builder=factory.newDocumentBuilder(); 
    13             Document doc = builder.parse(f); 
    14             NodeList nl = doc.getElementsByTagName("VALUE"); 
    15             for (int i=0;i<nl.getLength();i++){ 
    16                 System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); 
    17                 System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); 
    18             }
    19             
    20         }catch(Exception e){ 
    21             e.printStackTrace(); 
    22         }
    23     }
    24 }
    View Code
    • 运行结果
    1 车牌号码:陕A1234车主地址:西安
    2 车牌号码:陕C1234车主地址:宝鸡
    View Code

    2. JDOM(需要导入jdom.jar包

    • XmlTest.java
     1 import java.io.*; 
     2 import java.util.*; 
     3 import org.jdom.*; 
     4 import org.jdom.input.*; 
     5 
     6 public class XmlTest { 
     7     public static void main(String arge[]) { 
     8         long lasting = System.currentTimeMillis(); 
     9         try { 
    10             SAXBuilder builder = new SAXBuilder(); 
    11             Document doc = builder.build(new File("xmltest.xml")); 
    12             Element foo = doc.getRootElement(); 
    13             List allChildren = foo.getChildren(); 
    14             for(int i=0;i<allChildren.size();i++) { 
    15                 System.out.println("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText());
    16                 System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); 
    17                 }
    18             }catch (Exception e) { 
    19                 e.printStackTrace(); 
    20             }
    21     }
    22 }
    View Code
    • 运行结果:
    1 车牌号码:陕A1234
    2 车主地址:西安
    3 车牌号码:陕C1234
    4 车主地址:宝鸡
    View Code

    3. DOM4J(需要导入dom4j.jar包

    • XmlTest.java
     1 import java.io.*; 
     2 import java.util.*; 
     3 import org.dom4j.*; 
     4 import org.dom4j.io.*; 
     5 
     6 public class XmlTest { 
     7     public static void main(String arge[]) { 
     8         long lasting = System.currentTimeMillis(); 
     9         try { 
    10             File f = new File("xmltest.xml"); 
    11             SAXReader reader = new SAXReader(); 
    12             Document doc = reader.read(f); 
    13             Element root = doc.getRootElement(); 
    14             Element foo; 
    15             for (Iterator i = root.elementIterator("VALUE");i.hasNext();){ 
    16                 foo = (Element)i.next(); 
    17                 System.out.println("车牌号码:" + foo.elementText("NO")); 
    18                 System.out.println("车主地址:" + foo.elementText("ADDR")); 
    19                 } 
    20             } catch (Exception e) { 
    21                 e.printStackTrace(); 
    22             }
    23         }
    24 }
    View Code
    • 运行结果:
    1 车牌号码:陕A1234
    2 车主地址:西安
    3 车牌号码:陕C1234
    4 车主地址:宝鸡
    View Code

    4. SAX(还没有完全理解清楚,存在问题,在输出的时候,会把xml文档中</NO>后面的内容页输出)

    • XmlTest.java
     1 import org.xml.sax.*; 
     2 import org.xml.sax.helpers.*; 
     3 import javax.xml.parsers.*;
     4 import java.util.Stack;
     5 
     6 public class XmlTest extends DefaultHandler { 
     7     Stack tags = new Stack(); 
     8     public XmlTest() { 
     9         super(); 
    10         } 
    11     public void characters(char ch[], int start, int length) throws SAXException { 
    12         String tag = (String) tags.peek(); //查看栈顶对象而不删除它
    13         if (tag.equals("NO")) { //如果栈顶多想是"NO"输出
    14             System.out.println("车牌号码:" +new String(ch, start, length));
    15             } 
    16         if (tag.equals("ADDR")) {//如果栈顶多想是"ADDR"输出
    17             System.out.println("地址:" + new String(ch, start, length)); 
    18             }
    19         } 
    20     public void startElement(String url,String localName,String qName,Attributes attrs) { 
    21         tags.push(qName);
    22         } 
    23     public static void main(String args[]) { 
    24         long lasting = System.currentTimeMillis(); 
    25         try { 
    26             SAXParserFactory sf = SAXParserFactory.newInstance(); 
    27             SAXParser sp = sf.newSAXParser(); 
    28             XmlTest reader = new XmlTest(); 
    29             sp.parse(new InputSource("xmltest.xml"), reader);     
    30             } catch (Exception e) { 
    31                 e.printStackTrace(); 
    32                 } 
    33         System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");
    34         } 
    35 }
    View Code
    • 运行结果:
     1 车牌号码:陕A1234
     2 车牌号码:
     3      
     4 地址:西安
     5 地址:
     6   
     7 地址:
     8    
     9 车牌号码:陕C1234
    10 车牌号码:
    11      
    12 地址:宝鸡
    13 地址:
    14      
    15 地址:123
    16 地址:
    17   
    18 地址:
    19 
    20 运行时间:51毫秒
    View Code

    【参考资料】

    1. http://download.csdn.net/detail/shizhending/4067649#comment

    【后面的话】

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

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

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

    ——TT

  • 相关阅读:
    前端开发资料、实用小工具
    冒泡排序法,二分查找法
    数组练习
    一维数组练习题
    for循环输出菱形
    练习题
    课堂练习
    gO语言的安装和环境变量的配置
    PO BO VO DTO POJO DAO 概念及其作用
    BaseServlet
  • 原文地址:https://www.cnblogs.com/xt0810/p/3565367.html
Copyright © 2011-2022 走看看