老王学jsp之dom解析xml
xml是一种数据的存储方式,标签完全由用户自定义,是一种树状的结构,必须完全匹配,比如:
<?xml version="1.0" encoding="GBK" ?> <address> <person> <name>老王</name> <sex>男</sex> <phone>15520080563</phone> </person> <person> <name>老大</name> <sex>男</sex> <phone>15520080563</phone> </person> </address>
1.xml文档的读取(DOM方式)
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 readXmlByDom { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//新建工厂对象 DocumentBuilder builder=factory.newDocumentBuilder();//实例化builder对象 Document doc=builder.parse(new File("D:/学习资料/JAVA/软件/work/xml/src/demo1.xml")); NodeList nl = doc.getElementsByTagName("person") ; for(int x=0;x<nl.getLength();x++){ Element e = (Element) nl.item(x) ; // 取出每一个元素 System.out.println("姓名:" + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()) ; System.out.println("电话:" + e.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue()) ; } } }
输出结果:
姓名:老王
电话:15520080563
姓名:老大
电话:15520080563
2.xml文档的新建
import java.io.* ; import org.w3c.dom.* ; import javax.xml.parsers.* ; import javax.xml.transform.* ; import javax.xml.transform.dom.* ; import javax.xml.transform.stream.* ; public class hh{ public static void main(String args[]) throws Exception { // 取得DocumentBuilderFactory类的对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ; // 取得DocumentBuilder类的对象 DocumentBuilder build = factory.newDocumentBuilder() ; Document doc = build.newDocument() ; // 创建一个新的XML文档 Element addresslist = doc.createElement("addresslist") ; Element linkman = doc.createElement("linkman") ; Element name = doc.createElement("name") ; Element email = doc.createElement("email") ; // 设置节点内容 name.appendChild(doc.createTextNode("老王")) ; email.appendChild(doc.createTextNode("wanglei134@foxmail.com")) ; // 该设置各个节点的关系 linkman.appendChild(name) ; // name是linkeman的子节点 linkman.appendChild(email) ; // email是linkman的子节点 addresslist.appendChild(linkman) ; doc.appendChild(addresslist) ; 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+"output.xml")) ; t.transform(source,result) ; } }