XML 解析(下)
来源:互联网 发布:网络教育哪个专业好考 编辑:程序博客网 时间:2024/06/15 03:29
XML常见的解析方式
- DOM(文档对象模型)
取出.xml文件中的信息
public class StudentManager { static Document document; static String Path = "src\\com\\etc\\student.xml"; static { // 1、创建解析器工厂 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db; // 2、根据解析器工厂获得解析器对象 try { db = dbf.newDocumentBuilder(); // 3、加载XML文档,形成Document对象 document = db.parse(Path); } catch (Exception e) { e.printStackTrace(); } } public void show() { NodeList list = document.getElementsByTagName("student");// 取出所有的Student子节点 System.out.println("一共有:" + list.getLength() + "位学生"); for (int i = 0; i < list.getLength(); i++) { Node node = list.item(i); //取节点的属性值必须要转换成ELement对象 Element e = (Element) node; System.out.println("学号:" + e.getAttribute("id")); // 循环取Student节点下的子节点 for (Node n = node.getFirstChild(); n != null; n = n.getNextSibling()) { if (n.getNodeType() == node.ELEMENT_NODE)// 判断是不是元素节点 { if (!n.getNodeName().equals("scores")) { if (n.getNodeName().equals("name")) { System.out.println("姓名:" + n.getFirstChild().getNodeValue()); } else if (n.getNodeName().equals("sex")) { System.out.println("性别:" + n.getFirstChild().getNodeValue()); } else if (n.getNodeName().equals("age")) { System.out.println("年龄:" + n.getFirstChild().getNodeValue()); } else if (n.getNodeName().equals("phone")) { System.out.println("电话:" + n.getFirstChild().getNodeValue()); } } else {// 取出成绩 System.out.println("成绩如下:"); for (Node scNode = n.getFirstChild(); scNode != null; scNode = scNode .getNextSibling()) { if (scNode.getNodeType() == scNode.ELEMENT_NODE) System.out.println(scNode.getFirstChild() .getNodeValue()); } System.out.println("============="); } } } } }
往.xml文件中添加信息
public void add() { String name = "王锤锤"; String id = "04"; String sex = "女"; String age = "12"; String phone = "12323423423"; // 创建Student节点 Element studentElement = document.createElement("student"); Attr idAttr = document.createAttribute("id");// 创建ID属性 idAttr.setValue(id);// 给ID属性赋值ֵ studentElement.setAttributeNode(idAttr);// 把ID属性加入到Student节点中 Element e1 = document.createElement("name");// 创建name节点 e1.setTextContent(name);// 给节点设置数据 studentElement.appendChild(e1);// 把ID属性加入到Student节点中 e1 = document.createElement("sex");// 创建sex节点 e1.setTextContent(sex);// 给节点设置数据 studentElement.appendChild(e1);//把sex属性加入到Student节点中 e1 = document.createElement("age");// 创建age节点 e1.setTextContent(age);// 给节点设置数据 studentElement.appendChild(e1);// 把age属性加入到Student节点中 e1 = document.createElement("phone");// 创建phone节点 e1.setTextContent(phone);// 给节点设置数据 studentElement.appendChild(e1);//把phone属性加入到Student节点中 // 取跟节点 Element root = document.getDocumentElement(); root.appendChild(studentElement);// 把Student节点加入根节点的子节点中 /*save();*/ //更新XML文档 TransformerFactory tff = TransformerFactory.newInstance(); try { Transformer tf = tff.newTransformer(); DOMSource domSource = new DOMSource(document); StreamResult ss = new StreamResult(Path); tf.transform(domSource, ss); } catch (Exception e) { e.printStackTrace(); } }
删除.XML文件节点信息
public void delete() { String id = "04"; // 取所有Student节点集合 NodeList list = document.getElementsByTagName("student"); // 循环每一个Student节点 for (int i = 0; i < list.getLength(); i++) { Node n = list.item(i); Element e = (Element) n;// 取节点的ID属性值ֵ String idString = e.getAttribute("id"); if (idString.equals(id)) { // 删除节点,方法是:取当前节点的父节点,根据父节点来一处子节点 n.getParentNode().removeChild(n); break; } } save(); }
更新.XML文件信息
public void update() { String id = "04"; String name = "王大锤"; String sex = "男"; // 取所有Student节点集合 NodeList list = document.getElementsByTagName("student"); // 循环每一个Student节点 for (int i = 0; i < list.getLength(); i++) { Node n = list.item(i); Element e = (Element) n;// 取节点的ID属性值ֵ String idString = e.getAttribute("id"); if (idString.equals(id)) {//判断是否要进行更新的节点 // 改节点中某个子节点的内容 for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling()) { if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("name")) { node.getFirstChild().setTextContent(name); } else if (node.getNodeType() == Node.ELEMENT_NODE && node.getNodeName().equals("sex")) { node.getFirstChild().setTextContent(sex); } } break; } } save(); } public void save() { //更新XML文档 TransformerFactory tff = TransformerFactory.newInstance(); try { Transformer tf = tff.newTransformer(); DOMSource domSource = new DOMSource(document); StreamResult ss = new StreamResult(Path); tf.transform(domSource, ss); } catch (Exception e) { e.printStackTrace(); } }
DOM4J
DOM4J:非常优秀的Java XML API性能优异。功能强大开放源代码
public class Dom4j1 { static String Path = "src\\com\\etc\\student.xml"; static Document document = null; static { SAXReader saxReader = new SAXReader(); try { document = saxReader.read(new File(Path)); } catch (Exception e) { e.printStackTrace(); } } public void show(){ // 取根节点 Element root = document.getRootElement(); // 取节点下的所有子节点:Student List<Element> list = root.elements(); for (Element element : list) { System.out.println("学号:" + element.attribute("id").getValue()); // 取student节点中的所以子节点 List<Element> elements = element.elements(); for (Element element2 : elements) { if (!element2.getName().equals("scores")) { System.out.println(element2.getName() + " : " + element2.getText()); } else { System.out.println("成绩为:"); List<Element> scores = element2.elements(); for (Element e : scores) { System.out.println(e.getText()); } System.out.println(); } } System.out.println("======="); } } public void add(){ String name = "孙晓晓"; String id= "05"; String sex="女"; String age = "13"; String phone = "23423454323"; //根节点 Element root = document.getRootElement(); //为根节点添加子节点,并且获得刚刚添加的节点对象 Element student = root.addElement("student"); student.addAttribute("id", id);//为Student节点添加属性 student.addElement("name").setText(name); student.addElement("sex").setText(sex); student.addElement("age").setText(age); student.addElement("phone").setText(phone); save(); } public void delete(){ String id= "05"; Element root = document.getRootElement(); //取节点下的所有子节点:Student List<Element> list = root.elements(); for(int i = 0; i<list.size();i++){ Element element2 = (Element)list.get(i); String idString = element2.attributeValue("id"); if(idString.equals(id)){ root.remove(element2); } } save(); } public void update(){ String id = "05"; String name = "孙大大"; String sex = "男"; Element root = document.getRootElement(); //取节点下的所有子节点:Student List<Element> list = root.elements(); for(Element e:list){ if(e.attribute("id").getValue().equals(id)){ e.element("name").setText(name); e.element("sex").setText(sex); } } } public void save(){ OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); XMLWriter writer = null; try { writer = new XMLWriter(new FileWriter(Path),format); writer.write(document); } catch (Exception e) { e.printStackTrace(); }finally{ try { writer.close(); } catch (Exception e) { e.printStackTrace(); } } }}
阅读全文
0 0
- XML 解析(下)
- java中的xml,解析xml(下)
- Android下解析XML
- 【XML解析】(4)Java下使用DOM4J解析方式对XML文档进行解析
- Android下Xml解析技术(一)、SAX解析Xml文件
- Android下Xml解析技术(二)、DOM解析Xml文件
- Android下Xml解析技术(三)、pull解析Xml文件
- Android下Xml解析技术(一)、SAX解析Xml文件
- Android下Xml解析技术(二)、DOM解析Xml文件
- Android下Xml解析技术(三)、pull解析Xml文件
- Android下解析网络XML
- ios下TBXML解析xml
- Android网络下解析XML
- linux下 libxml2 xml解析
- vs2012下tinyXml解析xml
- dom4j下解析xml文件
- iOS下的XML解析
- J2EE复习(二)XML(下)--xml解析
- VRPN的使用
- ios-消息循环
- OpenCV学习笔记——imread、imwrite以及imshow
- Serializable方式实现数据传递
- Docker生成自动化测试环境镜像
- XML 解析(下)
- 在VC下执行DOS命令
- C++中的static关键字的总结
- 基础知识
- 51NOD-最长公共子序列问题
- 随感
- 系统编程之进程控制编程(一)
- Gym
- 排队的奶牛(Cows in a Row)