【前面的话】
学习过程中还是效率不够高,老是容易注意力不集中,着急啊。不能在这样了,要好好学习,好好努力。
学习过程中的小知识点总结,基础知识,选择阅读。
【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>
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 }
- 运行结果
1 车牌号码:陕A1234车主地址:西安 2 车牌号码:陕C1234车主地址:宝鸡
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 }
- 运行结果:
1 车牌号码:陕A1234 2 车主地址:西安 3 车牌号码:陕C1234 4 车主地址:宝鸡
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 }
- 运行结果:
1 车牌号码:陕A1234 2 车主地址:西安 3 车牌号码:陕C1234 4 车主地址:宝鸡
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 }
- 运行结果:
1 车牌号码:陕A1234 2 车牌号码: 3 4 地址:西安 5 地址: 6 7 地址: 8 9 车牌号码:陕C1234 10 车牌号码: 11 12 地址:宝鸡 13 地址: 14 15 地址:123 16 地址: 17 18 地址: 19 20 运行时间:51毫秒
【参考资料】
【后面的话】
学习总会有学不下去的时候,没事,好好休息休息,再接着来。加油吧,少年。
分享:《许三观卖血记》——记忆深刻。
- 一乐吃不到1元7角的一碗面,一个人在哭泣的时候。
- 许三观为了给一乐治疗肝炎连续卖血。
- 当许三观自己的血卖不出。生活的状况也不需要他再去卖血,他哭泣的说:以前的生活灾难,都是靠我卖血度过的,那么现在我的血卖不出了,以后生活的灾难我们怎么度过。
——TT