XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具体可参阅w3c官方网站文档http://www.w3.org获取更多信息。
XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。
demo.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<employees>
<employee>
<name>Joe</name>
<sex>male</sex>
<age>20</age>
</employee>
</employees>
Dom 1
Dom 2
XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。
demo.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<employees>
<employee>
<name>Joe</name>
<sex>male</sex>
<age>20</age>
</employee>
</employees>
Dom 1
package xml;
import java.io.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import org.xml.sax.SAXException;
public class DomDemo {
private Document document;
public void init() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
this.document=builder.newDocument();
} catch (ParserConfigurationException e) {
System.out.println(e.toString());
}
}
public void creatXML(String filename){
Element root=this.document.createElement("employees");
this.document.appendChild(root);
Element employee=this.document.createElement("employee");
Element name=this.document.createElement("name");
Node nameNode=this.document.createTextNode("Joe");
name.appendChild(nameNode);
employee.appendChild(name);
Element sex=this.document.createElement("sex");
Node sexNode=this.document.createTextNode("male");
sex.appendChild(sexNode);
employee.appendChild(sex);
Element age=this.document.createElement("age");
age.appendChild(this.document.createTextNode("20"));
employee.appendChild(age);
root.appendChild(employee);
TransformerFactory factory=TransformerFactory.newInstance();
try{
Transformer transformer=factory.newTransformer();
DOMSource domSource=new DOMSource(this.document);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
PrintWriter writer=new PrintWriter(new FileOutputStream(filename));
StreamResult sr=new StreamResult(writer);
transformer.transform(domSource, sr);
System.out.println("生成XML文件成功!");
}catch (TransformerConfigurationException e) {
System.out.println(e.getMessage());
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (TransformerException e) {
System.out.println(e.getMessage());
}
}
public void parserXML(String filename){
try{
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(filename);
NodeList employees=document.getChildNodes();
for(int i=0;i<employees.getLength();i++){
Node employee=employees.item(i);
NodeList employeeInfo=employee.getChildNodes();
for(int j=0;j<employeeInfo.getLength();j++){
Node node=employeeInfo.item(j);
NodeList employeeMeta=node.getChildNodes();
for(int k=0;k<employeeMeta.getLength();k++){
System.out.println(employeeMeta.item(k).getNodeName()+":"+
employeeMeta.item(k).getTextContent());
}
}
}
System.out.println("解析完毕!");
}catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (ParserConfigurationException e) {
System.out.println(e.getMessage());
} catch (SAXException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args){
DomDemo demo=new DomDemo();
demo.init();
demo.parserXML("demo.xml");
}
}
Dom 2
package xml;
import com.sun.org.apache.xerces.internal.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class TestDOMParser {
public void parseXMLFile(String fileName){
try{
//构造Dom解析器的实例
DOMParser parser=new DOMParser();
//将XML文件转换成DOM树存入内存
parser.parse(fileName);
Document document=parser.getDocument();
//获取root节点
Element root=document.getDocumentElement();
NodeList employees=root.getElementsByTagName("employee");
System.out.println("XML文件开始解析");
for(int i=0;i<employees.getLength();i++){
//当前employee元素
Element employee=(Element)employees.item(i);
NodeList names=employee.getElementsByTagName("name");
System.out.println("name:"+names.item(0).getFirstChild().getNodeValue());
NodeList sexs=employee.getElementsByTagName("sex");
System.out.println("sex:"+sexs.item(0).getFirstChild().getNodeValue());
NodeList ages=employee.getElementsByTagName("age");
System.out.println("age:"+ages.item(0).getFirstChild().getNodeValue());
}
System.out.println("XML文件解析结束");
}catch(Exception e){
System.out.println(e.toString());
}
}
public static void main(String[] args){
TestDOMParser parser=new TestDOMParser();
parser.parseXMLFile("demo.xml");
}
}