java解析XMl文件完整版DOM解析XML
- 格式:wps
- 大小:57.50 KB
- 文档页数:9
package XML;import java.io.FileOutputStream;import java.io.OutputStreamWriter;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;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class DomTest {private Document doc;//获得DOM树,元素的添加删除都会用到DOM树所以抽出一个方法来public void document(){try {// 1.创建解析工厂对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 2.通过解析器工厂对象创建解析器对象DocumentBuilder document =factory.newDocumentBuilder();// 3.指定解析XML文件,parse("路径")里面写的是文件的路径,并不是文件名。
我这里是在这个项目里面,所有写的是相对路径。
doc = document.parse("NewFile.xml");} catch (Exception e) {}}//解析XML文件public void showInfo() {try {NodeList list =doc.getElementsByTagName("Brand");// 5.遍历Ndelist集合拿到元素值for (int i = 0; i < list.getLength(); i++) {// 6.Nodelist集合中有一个方法就是item()可以拿到集合中的一个元素,Node node = list.item(i);// 7.因为他是Node类型所以需要类型转换Element books =(Element)node;// 8.通过getAttribute("id")方法,拿到属性值,括号里面写得是你要拿到的属性值的名字。
System.out.println(books.getAttribute("name")) ;// 9.因为books下面还有子节点所以通过getChildNodes()方法拿到他子节点的NodeList集合NodeList lists = books.getChildNodes();// 10.遍历Ndelist集合拿到次节点下的文本值for(int j= 0; j< lists.getLength(); j++) {Node nodes = lists.item(j);// 11.需要判断nodes是不是元素节点if(nodes.getNodeType()==Node.ELEMENT_NODE){Element elen = (Element)nodes;System.out.println("\t"+elen.getAttribute("nam e"));}}}} catch (Exception e) {}}// XML写public void writer(String path) {try {// 1.获得转换器对象工厂TransformerFactory factory = TransformerFactory.newInstance();// 设置缩进4个字符factory.setAttribute("indent-number", 4);// 2.转换器工厂对象获得转换器对象Transformer form =factory.newTransformer();// 3.Transformer对象指定的转换格式,设置输出时的属性格式,输出是的编码格式OutputKeys.ENCODING关键字form.setOutputProperty(OutputKeys.ENCODING, "UTF-8");// 开启字符缩进格式form.setOutputProperty(OutputKeys.INDENT,"yes" );// 4.源DOMSource dom = new DOMSource(doc);// 5.目标,指定编码格式//StreamResult result = new StreamResult(new FileOutputStream(path));StreamResult result =new StreamResult(new OutputStreamWriter(newFileOutputStream(path),"UTF-8"));// 6.转换form.transform(dom, result);} catch (Exception e) {}}//添加元素public void addElement(){// 1.创建Brand元素Element brand = doc.createElement("Brand");// 2.设置Brand元素属性和属性值name=“三星”;brand.setAttribute("name", "三星");// 1.创建type元素Element type = doc.createElement("type");// 2.设置type元素属性和属性值name="Node"type.setAttribute("name", "Node");// 3.把type添加到brand中brand.appendChild(type);// 4.然后在把brand添加到第一个跟元素下doc.getElementsByTagName("Phoneinof").item(0)doc.getElementsByTagName("Phoneinof").item(0). appendChild(brand);this.writer("domes.xml");}//添加属性public void addEle(){// 1.获取到每一个Brand元素NodeList list =doc.getElementsByTagName("Brand");for (int i = 0; i < list.getLength(); i++) { Node brand = list.item(i);Element brands = (Element)brand;// 2.修改每一个Brand元素brands.setAttribute("ID", i+"");}this.writer("domes.xml");}//删除元素public void delete(){//遍历元素找到苹果name = 苹果;NodeList list =doc.getElementsByTagName("Brand");for (int i = 0; i < list.getLength(); i++) { Node brand = list.item(i);Element brands = (Element)brand;if(brands.getAttribute("name").equals("苹果")){//在父节点删掉brands元素,brand.getParentNode()获得父节点方法brand.getParentNode().removeChild(brands);}}this.writer("domes.xml");}public static void main(String[] args) { DomTest dome =new DomTest();dome.document();dome.delete();}/*** 2016年11月9日22:33:27*/}。