什么是XML
剖析XML
剖析XML的两种体式格局
运用dom4j剖析xml
dom4j的部份API
打印一个XML文件的全部内容
在dom4j中运用XPath剖析XML
相干的部份API
XPath的途径表达式
通配符
谓语
运用java写一个XMl文件
将一个带有书本信息的List鸠合剖析为XML文件
Schema和DTD的区分
参考文章
1 什么是XML
XML(eXtensible markup language) 是一种可扩大的标记言语 ,纵然能够自定义标签的言语。
2 剖析XML
2.1 剖析的两种体式格局
XML的剖析分为两种体式格局,分别是SAX和DOM。
DOM:(Document Object Model,就是文档对象模子),是W3C组织引荐的处置惩罚XML的一种体式格局。运用该体式格局剖析XML文档,会把文档中的一切元素,根据其涌现的条理关联,在内存中组织出树形组织。因而对内存的压力大,剖析熟读慢,长处就是能够遍历和修正节点的内容。
SAX:(Simple API for XML) 是一种XML剖析的替换要领。相比较于DOM,剖析速率更快,内存的压力更小;瑕玷就是不能修正节点的内容。
2.2 运用dom4j剖析XML
在运用dom4j剖析XML之前须要导入相干的工具包,比方笔者的: dom4j-1.6.1.jar 包
2.2.1 dom4j的API
//建立SAXReader,是dom4j包供应的剖析器SAXReader reader=new SAXReader();//读取指定的文件Document doc=reader.read(new File(filename)); Document Document getRootElement() 用于猎取根元素 Element Element element(String name) 猎取元素下指定称号的子元素 List<Element> elements() 猎取元素下一切的子元素 String getName() 猎取元素名 String getText() 猎取元素文本内容 String elementText(String name) 猎取子元素文本内容 Attribute attribute(String) 猎取元素的属性 String attributeValue(String name) 猎取元素的属性值 Attribute String getName() 猎取属性的名字 String getValue() 猎取属性的值
2.2.2 打印一个XML文件的全部内容
pricties.xml文件直接位于项面前目今
<?xml version="1.0" encoding="utf-8" ?><books id="a"> <book id="b"><name id="c_1" name="c_2">三国归纳</name><author id="d_1" name="d_2" >罗贯中</author><price id="e">58.8</price> </book> <book id="f_1" name="f_2"><name id="g">水浒传</name><author id="h">施耐庵</author><price id="i">49.8</price> </book> <book id="j_1" name="j_2"><name id="k">西游记</name><author id="l">吴承恩</author><price id="m">100.1</price><order>1</order> </book></books>pricties.xml
import java.io.File;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class ParseXML {public static void main(String[] args) {//建立SAXReader对象SAXReader saxr=new SAXReader(); Document docu=null;try{//读取指定的文件,相对于项目途径docu=saxr.read(new File("pricties.xml"));//取得元素的文件的根节点Element e=docu.getRootElement(); searchAllElement(e); }catch(Exception e){ e.printStackTrace(); } } public static void searchAllElement(Element e){//取得当前元素下的一切子元素,并存储到鸠合中List<Element> elements=e.elements(); System.out.print("<"+e.getName());//打印最先标记List<Attribute> atrs=e.attributes();//打印该标记下的一切属性for(Attribute att:atrs){ System.out.print(" "+att.getName()+"=\""+att.getValue()+"\""); } System.out.println(">"); //假如鸠合的大小为0,示意该鸠合下没有子元素了if(elements.size()==0){ System.out.println(e.getText());//打印文本信息System.out.println("</"+e.getName()+">");//打印完毕标记return;//退出当前层要领 } //递归每个子元素for(Element ele:elements){ searchAllElement(ele); } System.out.println("</"+e.getName()+">");//打印完毕标记 } }parseXML.xml
2.3 在dom4j中运用XPath剖析XML
起首须要在dom4j基础上引入响应的jar包,比方读者的: jaxen-1.1-beta-6.jar
2.3.1 XPath的API
Document List<Node> selectNodes(String xpath) Node selectSingleNode(String xpath)
2.3.2 XPath的途径表达式
2.3.2.1 XPath的途径表达式划定规矩
2.3.2.2 XPath的途径表达式运用案例
2.3.3 通配符
2.3.3.1 通配符划定规矩
2.3.3.2 通配符运用案例
2.3.4 谓语
2.3.4.1 谓语划定规矩
谓语是用来查找某个特定的节点或是包括某个指定的值的节点
谓语被嵌在方括号中
2.3.4.2 谓语运用案例
3 java写XML文件
3.1 将一个带有书本信息的List鸠合剖析为XML文件
package com.xdl.xml;public class Book {private String name;private String author;private String price;public Book() {super(); }public Book(String name, String author, String price) {super(); setName(name); setAuthor(author); setPrice(price); }/** * @return the name */public String getName() {return name; }/** * @param name the name to set */public void setName(String name) {this.name = name; }/** * @return the author */public String getAuthor() {return author; }/** * @param author the author to set */public void setAuthor(String author) {this.author = author; }/** * @return the price */public String getPrice() {return price; }/** * @param price the price to set */public void setPrice(String price) {this.price = price; } }Book.java
package com.xdl.xml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.XMLWriter;public class WriteXML {public static void main(String[] args) {//建立一个Book鸠合用于存储书本信息List<Book> list_books=new ArrayList<Book>();//插进去书本信息for(int i=0;i<6;i++){ Book book=new Book("jame"+i,"author"+i,""+i); list_books.add(book); } //建立一个文档对象Document doc=DocumentHelper.createDocument();//建立一个根节点Element books=DocumentHelper.createElement("books"); //取得书本鸠合的大小int size=list_books.size();for(int i=0;i<size;i++){//建立一个book节点Element book=books.addElement("book");//建立一个name节点Element name=book.addElement("name");//建立一个author节点Element author=book.addElement("author");//建立一个price节点Element price=book.addElement("price"); name.setText(list_books.get(i).getName()); author.setText(list_books.get(i).getAuthor()); price.setText(list_books.get(i).getPrice()); }//设置文档根节点 doc.setRootElement(books); try {//假如文件不存在,会自动建立FileOutputStream fos = new FileOutputStream(new File("books.xml")); XMLWriter xmlw = new XMLWriter(fos); xmlw.write(doc); xmlw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }WriteXML.java
4 Schema和DTD的区分
Schema是对XML文档组织的定义和形貌,其主要的作用是用来束缚XML文件,并考证XML文件有效性。DTD的作用是定义XML的正当构建模块,它运用一系列的正当元夙来定义文档组织。它们之间的区分有下面几点:
1、Schema自身也是XML文档,DTD定义跟XML没有什么关联,Schema在明白和现实运用有许多的优点。
2、DTD文档的组织是“平铺型”的,假如定义庞杂的XML文档,很难把握各元素之间的嵌套关联;Schema文档组织性强,各元素之间的嵌套关联异常直观。
3、DTD只能指定元素含有文本,不能定义元素文本的细致范例,如字符型、整型、日期型、自定义范例等。Schema在这方面比DTD壮大。
4、Schema支撑元素节点递次的形貌,DTD没有供应无序状况的形貌,要定义无序必须穷举分列的一切状况。Schema能够应用xs:all来示意无序的状况。
5、对定名空间的支撑。DTD没法应用XML的定名空间,Schema很好满足定名空间。而且,Schema还供应了include和import两种援用定名空间的要领。
5 参考文章
Schema和DTD的区分
以上就是什么是XML?xml的实例解说的细致内容,更多请关注ki4网别的相干文章!