您现在的位置是:首页 > 电脑技术查询 > web开发

解析XML的若干步骤

编辑:chaxungu时间:2022-10-10 23:24:18分类:web开发

解析XML的若干方法

解析XML分为dom和sax两种方式,各有一些不同的java实现

 

一、dom:由W3C定义的接口,将整个XML文档读入内存构建成一个DOM树,再对各个节点进行操作

1)xml解析

@Overridepublic void parseXml(String filename){DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try{DocumentBuilder db = dbf.newDocumentBuilder();Document doc = db.parse(filename);Element root = doc.getDocumentElement();NodeList rootNodes = root.getChildNodes();System.out.println("root's length="+ rootNodes.getLength());iterateNodeList(root,rootNodes);}catch(Exception e){System.out.println(e);}}private void iterateNodeList(Node node, NodeList nodeList){System.out.println("=========start:"+node.getNodeName()+"============");int nodeListLength = nodeList.getLength();for(int i=0;i<nodeListLength;i++){Node childNode = nodeList.item(i);logNodeInfo(childNode,false);if(childNode.getNodeType()==Node.ELEMENT_NODE){NodeList childNodeList = childNode.getChildNodes();iterateNodeList(childNode,childNodeList);}}System.out.println("=========end:"+node.getNodeName()+"============");}

原始xml文档如下:

<?xml version="1.0" encoding="UTF-8"?><house location="USA"><room type="owner"><area><value>35</value><unit>m2</unit></area></room><room type="child"><area><value>25</value><unit>m2</unit></area></room><room type="guest"><area><value>25</value><unit>m2</unit></area></room></house>

 从程序parse后的结果可以看到,node之间是有空的文本节点(Node.TEXT_NODE)分隔的,结构如下:



 

 2)xml修改

public void modifyXml(String filename) {DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();try{DocumentBuilder db = dbf.newDocumentBuilder();Document doc = db.parse(filename);Element root = doc.getDocumentElement();root.setAttribute("price", "380000$");TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();DOMSource domSource = new DOMSource(doc);File file = new File("./src/house-modify.xml");if(file.exists()) file.delete();file.createNewFile();FileOutputStream out = new FileOutputStream(file);StreamResult streamResult = new StreamResult(out);transformer.transform(domSource, streamResult);System.out.println("file's absolute path=" + file.getAbsolutePath());}catch(Exception  e){System.out.println(e);}}