package DOM; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; 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.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class DomReader { /** * DOM方式解析xml文件 * 2010-05-10 */ /* * 用 DOM方式 创建xml */ private void creatXml(String filename){ /* * 创建新文件*/ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//①实例化 DocumentBuilder bulider = null; Document document = null; try { bulider = factory.newDocumentBuilder();//② document = bulider.newDocument();//③注意导的是org.w3c.dom.Document } catch (ParserConfigurationException e) { e.printStackTrace(); } /* * 如果是要改动XML文件(增加) * document的改动如下 * Document document = bulider.parse(filename); * 余下的一样 * filename 是要编辑的xml文件 * */ //创建XML元素结构 Element links = document.createElement("links"); Element link = document.createElement("link"); Element text = document.createElement("text"); Element url = document.createElement("url"); Element author = document.createElement("author"); text.setTextContent("网易主页"); url.setTextContent("http://www.163.com"); author.setTextContent("网易"); document.appendChild(links); links.appendChild(link); link.appendChild(text); link.appendChild(url); link.appendChild(author); /* * 保存*/ TransformerFactory tf = TransformerFactory.newInstance();//④ try { Transformer f = tf.newTransformer();//⑤ f.transform(new DOMSource(document), new StreamResult(new File(filename)));//⑥ } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } /* * 用DOM方式 解析XML */ private void parseXML(String filename){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//① DocumentBuilder bulider = null;//② Document document = null;//③ try { bulider = factory.newDocumentBuilder(); document = bulider.parse(filename); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } /* * 访问Xml的节点 * */ NodeList linkList = document.getElementsByTagName("link"); for(int i = 0; i < linkList.getLength(); i++){ Node n = linkList.item(i); NodeList childList = n.getChildNodes(); for(int j = 0; j< childList.getLength(); j++){ if(childList.item(j).getNodeType() == Node.ELEMENT_NODE){ System.out.println("子节点["+j+"]"+childList.item(j).getFirstChild().getTextContent()); } } } /* * 注意 * 注释根据打印结果大家可以看出DOM的解析原理,也就是说他解析的时候是一个标签就是一个节点比如:<link></link> * 这一对就是两个标签 * 所以这里childList.item(j).getFirstChild()我用getFirstChild() */ } public static void main(String[] args) { /*测试*/ DomReader dr = new DomReader(); //dr.creatXml("links.xml"); dr.parseXML("links.xml"); } }