Java_xml_Dom解析实现增删改查
1.Node准备Node接口是整个文档对象模型的主要数据类型,它表示该文档树中的单个节点。例如Attr, CharacterData, Comment, Text,Element都是Node的子类。 xml解析的误区: 在xml文件解析过程中,所有信息都被当做一个对象,例如解析下面的语句[java]/** <book>AAA<name>java语法</name>BBB</book>* 该book下的直接子节点有3个,AAA和BBB被解析为CharacterData类型的节点,<name>被解析为Element类型的节点,** <book> <name>java语法</name> </book>* 该book下的直接子节点有3个,由于在<name>之前有个换行,CharacterData类型的节点* <book><name>java语法</name></book> 该book下的直接子节点只有1个*/2.Dom解析优缺点优点:整个文档读入内存,方便操作:支持修改、删除和重现排列等多种功能。缺点:将整个文档读入内存中,保留了过多的不需要的节点,浪费内存和空间。3.Dom解析xml[java]/*** 解析xml文件,遍历并所有信息*/public static void parseXMl() {try {// 1.通过DocumentBuilder工厂得到对应的xml解析器DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();// 2.通过解析器得到Document对象Document doc = builder.parse("d:/my.xml");// 3.解析数据/** <book>* <name>javaWeb</name>* <author>fanglx</author>* <price>30.90</price>* </book>*///得到所有的book的标签的nodelistNodeList nodeList = doc.getElementsByTagName("book");//遍历每个book节点for(int i=0; i<nodeList.getLength(); i++){Node node = nodeList.item(i); //当前遍历的book节点//得到该book节点下的所有的直接子节点NodeList childNodes = node.getChildNodes();for(int j=0; j<childNodes.getLength(); j++){Node childNode = childNodes.item(j);//如果当前的childNode节点是一个标签,CharacterData类型的文本节点则不执行if(childNode instanceof Element){String fieldName = childNode.getNodeName(); //当前节点名称 比如authorString value = childNode.getTextContent(); //当前节点的text值比如fanglx/** 或者下面方式得到value值* String value = childNode.getFirstChild().getNodeName();//fanglx*/System.out.println(fieldName+"="+value); //author=fanglx}}}} catch (Exception e) {e.printStackTrace();}}[java]/*** 对xml文件的更新*/public static void updateXMl() {try {// 1.通过DocumentBuilder工厂得到对应的xml解析器DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();// 2.通过解析器得到Document对象Document doc = builder.parse("d:/my.xml");// 3.更新数据/** <book>* <name>javaWeb</name>* <author>fanglx</author>* <price>30.90</price>* </book>*/NodeList nodeList = doc.getElementsByTagName("book");Element parentEle = (Element) nodeList.item(0);//直接在子标签的尾部增加<num id="1001">25</num>Element childEle = doc.createElement("num");childEle.setAttribute("id", "1001");//设置属性childEle.setTextContent("25"); //设置值parentEle.appendChild(childEle);//直接在price标签前面增加<age id="25">mm</age>Element newChild = doc.createElement("age");newChild.setAttribute("id", "25"); //设置属性newChild.setTextContent("mm"); //设置值Element refChild = (Element) parentEle.getElementsByTagName("price").item(0);parentEle.insertBefore(newChild, refChild);// 4.保存更新的数据TransformerFactory tFactory = TransformerFactory.newInstance();Transformer transformer = tFactory.newTransformer();transformer.transform(new DOMSource(doc), new StreamResult(new补充:软件开发 , Java ,
上一个:不同语言下的日期格式化大全
下一个:设计模式之(三)Proxy模式