Java学习笔记(十)——xml

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

Java学习笔记(十)——xml

你可能感兴趣的:(Java学习)