package test;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;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;import org.w3c.dom.NodeList;/*** * @author echo lovely* * dom模式下的* xml文件的解析,读取,增删改* * 优缺点:* 1. 消耗内存大,把整个xml读到内存,适合数据少的读取* 2. 灵活,可对整个xml文档进行操作,操作父子,兄弟,第一个,最后一个结点* * 排版:* DocumentBuliderFactory BuilderFactory Document* * 印刷:* TransformerFactory Transformer transfome* */publicclassDocumentXMLNode{publicstaticvoidmain(String[] args)throws Exception {// createNew();// parserXML();// DOMAddXML();// DOMUpdateXML();DOMDeleteXML();}// one by onestaticvoidcreateXML()throws Exception {// 创建一个排版工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 创建一个排版机器DocumentBuilder db = factory.newDocumentBuilder();// 准备好空白文档,准备排版Document doc = db.newDocument();// 创建根节点Element root = doc.createElement("Student");// 把根结点挂载到文档中doc.appendChild(root);for(int i =0; i <3; i ++){// 创建stu结点Element stu = doc.createElement("stu"+(i +1));// 把元素结点添加到stu结点下root.appendChild(stu);// 设置element的属性stu.setAttribute("id",(i +1)+"");// 创建学生的姓名结点Element name = doc.createElement("name");name.setTextContent("小明"+ i);stu.appendChild(name);// 学生的年龄结点Element age = doc.createElement("age");age.setTextContent(""+(18+ i));stu.appendChild(age);}// 印刷// 创建印刷工场TransformerFactory tff = TransformerFactory.newInstance();// 印刷机器Transformer tf = tff.newTransformer();// 开始印刷// 创建xml数据源DOMSource source =newDOMSource(doc);// 确定输出位置StreamResult res =newStreamResult("stu.xml");tf.transform(source, res);}// 排版 or 解析static Document DOMComposing(String path)throws Exception {// 排版工场DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();// 排版机器DocumentBuilder db = dbf.newDocumentBuilder();Document doc = null;// 空白文档,准备排版if(path ==""|| path == null)doc = db.newDocument();else doc = db.parse(path);// 解析xmlreturn doc;}/*** @param doc 排版文档* @param xml文件输出路径* @throws Exception */staticvoidDOMPrinting(Document doc, String outputPath)throws Exception {// 排版工场TransformerFactory tff = TransformerFactory.newInstance();// 排版机器Transformer tf = tff.newTransformer();// 数据源DOMSource xmlSource =newDOMSource(doc);// 输出地址,开始排版 file:/// 中文路径乱码StreamResult res =newStreamResult(newFile(outputPath));tf.transform(xmlSource, res);}// hide difficultiesstaticvoidcreateNew(){try{Document doc =DOMComposing("");Element root = doc.createElement("person");doc.appendChild(root);for(int i =0; i <3; i ++){Element teacher = doc.createElement("teacher");teacher.setAttribute("id",""+(i +1));root.appendChild(teacher);Element name = doc.createElement("name");// 设置name结点的文本内容name.setTextContent("cici"+(i +1));Element age = doc.createElement("age");age.setTextContent((24+ i)+"");// 把姓名和年龄添加到teacher结点teacher.appendChild(name);teacher.appendChild(age);}DOMPrinting(doc,"person.xml");}catch(Exception e){e.printStackTrace();}}staticvoidparserXML()throws Exception {// 排版解析DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();// 解析xmlDocument doc = db.parse(newFile("stu.xml"));// Element root = (Element) doc.getFirstChild();Element root = doc.getDocumentElement();NodeList nodes = root.getChildNodes();System.out.println(nodes.item(0));for(int i =0; i < nodes.getLength(); i++){Element stu =(Element) nodes.item(i);String text = nodes.item(i).getFirstChild().getTextContent();System.out.println(stu.getAttribute("id")+"\t"+ text);}}}
element获取结点的其它方式
Element root = doc.getDocumentElement();root.getFirstChild();//获得当前节点第一个子节点root.getLastChild();//获得当前节点最后一个子节点root.getNextSibling();//获得当前节点下一个兄弟节点root.getPreviousSibling();//获得当前节点上一个兄弟节点root.getParentNode();//获得当前节点父节点
2.2 使用dom解析xml文件
对books.xml解析
staticvoiddomParse(){Document doc =docComposing("books.xml");Element root =(Element) doc.getFirstChild();NodeList list = root.getChildNodes();for(int i =0; i < list.getLength(); i++){Element book =(Element) list.item(i);System.out.println(book.getAttribute("id")+"\t"+ book.getTextContent());}}/**
1001 java
1002 c#
*/