Java与XML:采用DOM操作XML文件

1.DOM介绍

专注于为中小企业提供成都网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业贵南免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

DOM 是用与平台和语言无关的方式表示XML文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构, 然后才能做任何工作。 由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。 它还可以在任何时候在树中上下导航, 而不是像 SAX 那样是一次性的处理。 DOM使用起来也要简单得多。

2.采用DOM解析XML文件

代码实例:

 
 
 
 
  1. import java.io.FileInputStream;
  2. import java.io.FileNotFoundException;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import javax.xml.parsers.DocumentBuilder;
  6. import javax.xml.parsers.DocumentBuilderFactory;
  7. import javax.xml.parsers.ParserConfigurationException;
  8. import org.w3c.dom.Document;
  9. import org.w3c.dom.Element;
  10. import org.w3c.dom.Node;
  11. import org.w3c.dom.NodeList;
  12. import org.xml.sax.SAXException;
  13. /** * @Author:胡家威
  14.  * @CreateTime:2011-9-6 下午10:12:00
  15.  * @Description:采用DOM解析XML文件
  16.  */
  17. public class DomXML {
  18.     public void domXMl(String fileName) {
  19.         try {
  20.             DocumentBuilder domBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
  21.             InputStream input = new FileInputStream(fileName);
  22.             Document doc = domBuilder.parse(input);
  23.             Element root = doc.getDocumentElement();
  24.             NodeList students = root.getChildNodes();
  25.             if (students != null) {
  26.                 for (int i = 0, size = students.getLength(); i < size; i++) {
  27.                     Node student = students.item(i);
  28.                     if (student.getNodeType() == Node.ELEMENT_NODE) {
  29.                         String sexString = student.getAttributes().getNamedItem("性别").getNodeValue();
  30.                         System.out.println(sexString);
  31.                     }
  32.                     for (Node node = student.getFirstChild();
  33.  node != null; node = node.getNextSibling()) {
  34.                         if (node.getNodeType() == Node.ELEMENT_NODE) {
  35.                             if (node.getNodeName().equals("姓名")) {
  36.                                 String name = node.getFirstChild().getNodeValue();
  37.                                 System.out.println(name);
  38.                             }
  39.                             if (node.getNodeName().equals("年龄")) {
  40.                                 String age = node.getFirstChild().getNodeValue();
  41.                                 System.out.println(age);
  42.                             }
  43.                             if (node.getNodeName().equals("电话")) {
  44.                                 String tel = node.getFirstChild().getNodeValue();
  45.                                 System.out.println(tel);
  46.                             }
  47.                         }
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.  catch (FileNotFoundException e) {
  53.             e.printStackTrace();
  54.         }
  55.  catch (ParserConfigurationException e) {
  56.             e.printStackTrace();
  57.         }
  58.  catch (SAXException e) {
  59.             e.printStackTrace();
  60.         }
  61.  catch (IOException e) {
  62.             e.printStackTrace();
  63.         }
  64.     }
  65.     public static void main(String[] args) {
  66.         DomXML xmlTest = new DomXML();
  67.         String fileName = "students.xml";
  68.         xmlTest.domXMl(fileName);
  69.     }
  70. }

目录结构:在项目的根目录下面放置一个XML文件

 
 
 
 
  1.  
  2. <学生花名册> 
  3.     <学生 性别="男"> 
  4.         <姓名>李华 
  5.         <年龄>14 
  6.         <电话>6287555 
  7.      
  8.     <学生 性别="男"> 
  9.         <姓名>张三 
  10.         <年龄>16 
  11.         <电话>8273425 
  12.      
  13.  

运行结果:

李华

14

6287555

张三

16

8273425

3.使用DOM操作XML文件,进行增删查改

代码示例:

 
 
 
 
  1. import java.io.FileNotFoundException;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import javax.xml.parsers.DocumentBuilderFactory;
  5. import javax.xml.parsers.ParserConfigurationException;
  6. import javax.xml.transform.Transformer;
  7. import javax.xml.transform.TransformerConfigurationException;
  8. import javax.xml.transform.TransformerException;
  9. import javax.xml.transform.TransformerFactory;
  10. import javax.xml.transform.dom.DOMSource;
  11. import javax.xml.transform.stream.StreamResult;
  12. import javax.xml.xpath.XPathConstants;
  13. import javax.xml.xpath.XPathExpressionException;
  14. import javax.xml.xpath.XPathFactory;
  15. import org.w3c.dom.Document;
  16. import org.w3c.dom.Element;
  17. import org.w3c.dom.Node;
  18. import org.w3c.dom.NodeList;
  19. import org.xml.sax.SAXException;
  20. /**
  21.  * @Author:胡家威
  22.  * @CreateTime:2011-9-23 下午09:08:03
  23.  * @Description:DOM操作XML文件,增删查改
  24.  */
  25. public class DealXML {
  26.   public static void main(String[] args) {
  27.     try {
  28.       // Document-->Node
  29.       Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("products.xml");
  30.       Element root = document.getDocumentElement();
  31.       // 增加一个元素节点
  32.       Element newChild = document.createElement("project");
  33.       newChild.setAttribute("id", "NP001");// 添加id属性
  34.       Element nelement = document.createElement("name");// 元素节点
  35.       nelement.setTextContent("New Project");
  36.       newChild.appendChild(nelement);
  37.       Element selement = document.createElement("start-date");
  38.       selement.setTextContent("March 20 1999");
  39.       newChild.appendChild(selement);
  40.       Element eelement = document.createElement("end-date");
  41.       eelement.setTextContent("July 30 2004");
  42.       newChild.appendChild(eelement);
  43.       root.appendChild(newChild);
  44.       // 查找一个元素节点
  45.       String expression = "/projects/project[3]";
  46.       Element node = (Element) selectSingleNode(expression, root);// 转型一下
  47.       // 修改一个元素节点
  48.       node.getAttributeNode("id").setNodeValue("new "+node.getAttribute("id"));
  49.       // root.getElementsByTagName("project").item(2).setTextContent("");
  50.       expression = "/projects/project";
  51.       NodeList nodeList = selectNodes(expression, root);
  52.       nodeList.item(1).getAttributes().getNamedItem("id").setNodeValue("New Id");
  53.       // 删除一个元素节点
  54.       expression = "/projects/project[2]";
  55.       node = (Element) selectSingleNode(expression, root);
  56.       root.removeChild(root.getFirstChild());
  57.       output(root, "newProjects.xml");
  58.     } catch (SAXException e) {
  59.       e.printStackTrace();
  60.     } catch (IOException e) {
  61.       e.printStackTrace();
  62.     } catch (ParserConfigurationException e) {
  63.       e.printStackTrace();
  64.     }
  65.   }
  66.   public static void output(Node node, String filename) {
  67.     TransformerFactory transFactory = TransformerFactory.newInstance();
  68.     try {
  69.       Transformer transformer = transFactory.newTransformer();
  70.       // 设置各种输出属性
  71.       transformer.setOutputProperty("encoding", "gb2312");
  72.       transformer.setOutputProperty("indent", "yes");
  73.       DOMSource source = new DOMSource();
  74.       // 将待转换输出节点赋值给DOM源模型的持有者(holder)
  75.       source.setNode(node);
  76.       StreamResult result = new StreamResult();
  77.       if (filename == null) {
  78.         // 设置标准输出流为transformer的底层输出目标
  79.         result.setOutputStream(System.out);
  80.       } else {
  81.         result.setOutputStream(new FileOutputStream(filename));
  82.       }
  83.       // 执行转换从源模型到控制台输出流
  84.       transformer.transform(source, result);
  85.     } catch (TransformerConfigurationException e) {
  86.       e.printStackTrace();
  87.     } catch (TransformerException e) {
  88.       e.printStackTrace();
  89.     } catch (FileNotFoundException e) {
  90.       e.printStackTrace();
  91.     }
  92.   }
  93.   // 查找一个单独的节点
  94.   private static Node selectSingleNode(String expression, Object source) {
  95.     try {
  96.       return (Node) XPathFactory.newInstance().newXPath().evaluate(expression, source, XPathConstants.NODE);
  97.     } catch (XPathExpressionException e) {
  98.       e.printStackTrace();
  99.       return null;
  100.     }
  101.   }
  102.   // 查找所有的节点
  103.   private static NodeList selectNodes(String expression, Object source) {
  104.     try {
  105.       return (NodeList) XPathFactory.newInstance().newXPath().evaluate(expression, source, XPathConstants.NODESET);
  106.     } catch (XPathExpressionException e) {
  107.       e.printStackTrace();
  108.       return null;
  109.     }
  110.   }
  111. }

上边是修改前的,下边的是修改了之后生成的XML文件

网站栏目:Java与XML:采用DOM操作XML文件
分享链接:http://www.hantingmc.com/qtweb/news49/229899.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联