XML()可扩展标记语言,AJAX=(异步)JavaScript+XML
XML更适合数据交互,减轻访问服务器的负担,操作完成之后一次性上传数据,要求环境不高的时候,可以保存数据(使能XML数据库和原生XML数据库)
DOM
例子一:DOM解析XML文件
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class DOMDemo1 { public static void main(String args[]) throws Exception { //取得DocumentBuilderFactory类的对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //取得DocumentBuilder类的对象 DocumentBuilder builder = factory.newDocumentBuilder(); //定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作 //读取指定路径的XML文件 Document doc = builder.parse("D:"+File.separator+"XML"+File.separator+"dom_demo1.xml"); //查找name的节点 NodeList nodeList = doc.getElementsByTagName("name"); //输出NodeList中第一个子节点中文本节点的内容 System.out.println(nodeList.item(0).getFirstChild().getNodeValue()); } }dom_demo1.xml
<?xml version="1.0" encoding="gb2312"?> <!--<?xml-stylesheet type="text/css" href="style.css"?>--> <info> <name>lql</name> </info>
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class DOMDemo2 { public static void main(String args[])throws Exception{ //取得DocumentBuilderFactory类的对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //取得DocumentBuilder类的对象 DocumentBuilder builder = factory.newDocumentBuilder(); //定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作 //读取指定路径的XML文件 Document doc = builder.parse("D:"+File.separator+"XML"+File.separator+"dom_demo2.xml"); //查找link节点 NodeList nodeList = doc.getElementsByTagName("link"); //输出NodeList中第一个子节点中文本节点的内容 for(int i=0;i<nodeList.getLength();i++){//循环输出节点内容 Element element = (Element) nodeList.item(i);//取得每一个元素 System.out.print("姓名:"+element.getElementsByTagName("name"). item(0).getFirstChild().getNodeValue()); System.out.println(" email:"+element.getElementsByTagName("email"). item(0).getFirstChild().getNodeValue()); } } }dom_demo2.xml
<?xml version="1.0" encoding="gb2312"?> <!--<?xml-stylesheet type="text/css" href="style.css"?>--> <info> <link> <name>lql</name> <email>tony.liu@xxx.com</email> </link> <link> <name>Tony</name> <email>lql@xxx.com</email> </link> </info>例子三:写入XML数据
import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class DOMDemo3 { public static void main(String agrs[])throws Exception{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument();//创建一个新的文档 //建立各个操作节点 Element info = doc.createElement("info"); Element link = doc.createElement("link"); Element name = doc.createElement("name"); Element email = doc.createElement("email"); //设置节点的文本内容,即为每一个节点添加文本节点 name.appendChild(doc.createTextNode("lql")); email.appendChild(doc.createTextNode("tony.liu@xxx.com")); link.appendChild(name); link.appendChild(email); info.appendChild(link); doc.appendChild(info);//文档上保存节点 //输出到文档的文件中 TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); t.setOutputProperty(OutputKeys.ENCODING,"GBK");//设置编码 DOMSource source = new DOMSource(doc); //输出文档 //指定输出位置 StreamResult result = new StreamResult(new File("D:"+ File.separator+"XML"+File.separator+"dom_demo3.xml")); t.transform(source,result); } }
SAX
首先编写一个MySAX文件
import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; public class MySAX extends DefaultHandler{ //定义SAX解析器 public void startDocument(){ System.out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>"); } public void endDocument(){ System.out.println("\n 文档读取结束..."); } public void startElement(String uri,String localName,String qName,Attributes attributes){ System.out.print("<"); System.out.print(qName); if(attributes != null){ for(int x= 0 ;x<attributes.getLength();x++){ System.out.print(" "+attributes.getQName(x)+"=\"" +attributes.getValue(x)+"\""); } } System.out.print(">"); } public void endElement(String uri,String qName){ //元素结束 System.out.print("</"); System.out.print(qName); System.out.print(">"); } public void characters(char[] ch,int start,int length){//取得元素内容 System.out.print(new String(ch,start,length));//输出内容 } }调用MySAX
import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class TestSAX { public static void main(String[] args)throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("D:"+File.separator+"XML"+ File.separator+"dom_demo2.xml",new MySAX()); } }
JDOM
import java.io.File; import java.util.List; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; public class ReadXML { public static void main(String[] args)throws Exception { SAXBuilder builder = new SAXBuilder(); Document read_doc = builder.build("D:"+File.separator+"XML"+File.separator+"WriteXML.xml"); Element stu = read_doc.getRootElement();//读取根元素 List list = stu.getChildren("link"); for(int i=0;i<list.size();i++){ Element e = (Element)list.get(i); String name = e.getChildText("name"); String id = e.getChild("name").getAttribute("id").getValue(); String email = e.getChildText("email"); System.out.println(name+" "+email); } } }
WriteXML.xml
<?xml version="1.0" encoding="GBK"?> <info><link><name id="lql">lql</name><email>tony.liu@shheguo.com</email></link></info>jdom解析需要开源架包
DOM4J
解析数据
import java.io.File; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class DOM4JReader { public static void main(String[] args) throws Exception{ File file = new File("D:"+File.separator+ "XML"+File.separator+"dom_demo2.xml"); SAXReader reader = new SAXReader(); Document doc = reader.read(file);//读取xml文件 //JDOM操作的时候是要取得根节点 Element element = doc.getRootElement();// 取得根节点 // 现在应该根据根节点找到全部的子节点,link Iterator iter = element.elementIterator(); while(iter.hasNext()){ Element elem = (Element) iter.next(); System.out.print(elem.elementText("name")+" "); System.out.println(elem.elementText("email")); } } }
dom_demo2.xml
<?xml version="1.0" encoding="gb2312"?> <!--<?xml-stylesheet type="text/css" href="style.css"?>--> <info> <link> <name>lql</name> <email>tony.liu@xxx.com</email> </link> <link> <name>Tony</name> <email>123@xxx.com</email> </link> </info>
写入数据
import java.io.File; import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class DOM4JWriter { public static void main(String[] args)throws Exception { Document doc = DocumentHelper.createDocument(); Element info = doc.addElement("info"); Element link = info.addElement("link"); Element name = link.addElement("name"); Element email = link.addElement("email"); Element link1 = info.addElement("link"); Element name1 = link1.addElement("name"); name.setText("lql"); email.setText("tony.liu@shheguo.com"); name1.setText("tony"); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); XMLWriter writer = new XMLWriter(new FileOutputStream(new File( "d:"+File.separator+"XMl"+File.separator+"DOM4JWriter.xml"))); writer.write(doc); writer.close(); } }
dom4j解析xml架包