1.创建工厂 2.得到dom解析器 3.解析xml文档,得到代表文档的document DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(); DocumentBuilder builder =factory.newDocumentBuilder(); Document document =builder.parse("src/book.xml"); 使用dom方式对xml文档进行crud //读取 public void read1(){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); NodeList list = document.getElementsByTagName("书名"); Node node = list.item(1); String content = node.getTextContent(); System.out.println(content); } //得到xml文档的所有内容 public void read2(){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); Nodenode = document.getElementsByTagName("书架").item(0); list(root); } private void list(Node node){ if(node instanceof Element) //打印出文档标签, System.out.println(node.getNodeName()); NodeList list = node.getChildNodes(); for(int i=0;i<list.getLength();i++){ Node child = list.item(i); list(child); } } //得到xml文档的属性的值 public void read3(){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); Element bookname = (Element)document.getElementsByTagName("书名").item(0); String value = bookname.getAttribute("name"); System.out.println(value); } //对xml文档进行增加 public void add(){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); //创建节点 Element price = document.createElement("售价"); price.setTextContent("89.00元"); //把创建的节点挂到第一本书上 Element book = document.getElementsByName("书").item(0); book.appendChild(price); //把更新后的内存写回到xml文档 TransfoemerFactory tffactory =TransfoemerFactory.newInstance(); Transformer tg = tffactory.newTransfoemer(); ty.transform(new DOMSource(document),new Stream Result(newFileOutputStream("src/book.xml"))); } //向文档中指定位置上添加节点 public void add(){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("src/book.xml"); //创建节点 Element price = document.createElement("售价"); price.setTextContent("89.00元"); //把创建的节点挂到第一本书上 Element refNode = document.getElementsByName("售价").item(0); //往book节点的指定位置插入 Element book = document.getElementsByName("书").item(0); book.appendChild(price); //把更新后的内存写回到xml文档 TransfoemerFactory tffactory =TransfoemerFactory.newInstance(); Transformer tg = tffactory.newTransfoemer(); ty.transform(new DOMSource(document),new Stream Result(newFileOutputStream("src/book.xml"))); } Element e = (Element)document.getElementsByTagName("售价").item(0); e.getParentNode().getParentNode().removeChild(e.getParentNode()); TransfoemerFactory tffactory =TransformerFactory.newInstance(); Transformer tf =tffactory.newTransformer(); tf.transform(new DOMSource(document),newStreamResult(new FileOutputStream("src\book.xml"))); SAX解析 在使用DOM解析XML文档时,需要读取整个XML文档,在内存中构架代表整个DOM树的Document对象,从而再对XML文档进行操作,,此种情况下,如果XML文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。 SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会对文档进行操作。 SAX采用事件处理的方式解析XML文件,利用sax解析xml文档,涉及两个部分:解析器和事件处理器: 解析器可以使用JAXP的API创建,创建出sax解析器后,就可以指定解析器去解析某个xml文档。 解析器采用sax方式在解析某个xml文档时,它只要解析到xml文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到xml文件内容作为方法的参数传递给事件处理器 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松的得到解析器解析到的数据,从而可以决定如何对数据进行处理。 1.创建解析工厂 SAXParserFactory factory =SAXFactory.newInstance(); 2.得到解析器 SAXParser sp = factory.newSAXParser(); 3.得到读取器 XMLReader reader = sp.getXMLReader(); 4.设置内容处理器 reader.setContentHanler(new ListHandler()); 5.读取xml文档内容 reader.parse("src/book.xml"); //得到xml文档所有内容 class ListHandler implements ContentHandler public void startElement(String uri,StringlocalName,String name,Attributes atts) System.out.println("<"+name+">"); for(int i=0;atts!=null &&i<atts.getLength();i++){ String attName = atts.getQName(i); String attValue = atts.getValue(i); } public void endDocument System.out.println(newString(ch,start,length));
|