XML--- 简单的DOM解析XML文件,并实现增,删,查,改的操作

[java]  view plain copy
  1. JAVA项目文件  
  2. package dom_jiexi;  
  3.   
  4. import java.io.File;  
  5. import java.io.IOException;  
  6.   
  7. import javax.xml.parsers.DocumentBuilder;  
  8. import javax.xml.parsers.DocumentBuilderFactory;  
  9. import javax.xml.parsers.ParserConfigurationException;  
  10. import javax.xml.transform.Transformer;  
  11. import javax.xml.transform.TransformerConfigurationException;  
  12. import javax.xml.transform.TransformerException;  
  13. import javax.xml.transform.TransformerFactory;  
  14. import javax.xml.transform.dom.DOMSource;  
  15. import javax.xml.transform.stream.StreamResult;  
  16.   
  17. import org.junit.Test;  
  18. import org.w3c.dom.Attr;  
  19. import org.w3c.dom.Document;  
  20. import org.w3c.dom.Element;  
  21. import org.w3c.dom.Node;  
  22. import org.w3c.dom.NodeList;  
  23. import org.xml.sax.SAXException;  
  24.   
  25. public class XmlCrudDemo {  
  26.     @Test  
  27.     public void test() throws ParserConfigurationException, SAXException,  
  28.             IOException, TransformerException {  
  29.         // 调用DocumentBuilderFactory中的newInstance(),创建新的DocumentBuilderFactory实例对象  
  30.         DocumentBuilderFactory builderFactory = DocumentBuilderFactory  
  31.                 .newInstance();  
  32.         // 调用DocumentBuilderFactory中的newDocumentBuilder();创建一个新的Documentbuilder实例对象  
  33.         DocumentBuilder builder = builderFactory.newDocumentBuilder();  
  34.         // 调用DocumentBuilder中的parse(File f);方法创建指定文件的Document对象  
  35.         Document document = builder.parse(this.getClass().getClassLoader()  
  36.                 .getResourceAsStream("dom_jiexi//java.xml"));  
  37.         String tagname = "王亮";  
  38.         // insert(document);  
  39.         // findByElementName(document);  
  40.         // findByName(document, "Boss姚");  
  41.         // findById(document, "x121");  
  42.         // deleteNodeById(document, "x121");  
  43.         // updateNodeById(document, "x121");  
  44.         insert(document, "x121");  
  45.     }  
  46.   
  47.     // 向xml文件中指定的节点后添加节点  
  48.     public void insert(Document document, String id)  
  49.             throws TransformerException {  
  50.         // 获取要操作的元素节点对象  
  51.         Element elm = document.getElementById(id);  
  52.         // 获取该节点的父节点  
  53.         Node nodeparent = elm.getParentNode();  
  54.         // 通过传入的document对象创建一个指定的元素节点对象  
  55.         Element nd = document.createElement("student");  
  56.         // 设置属性并赋值  
  57.         nd.setAttribute("id""x13333");  
  58.         // 创建元素节点对象  
  59.         Node name = document.createElement("name");  
  60.         Node age = document.createElement("age");  
  61.         Node sex = document.createElement("sex");  
  62.         // 为创建的元素节点对象的文本节点赋值  
  63.         name.setTextContent("donghongyujava");  
  64.         age.setTextContent("20");  
  65.         sex.setTextContent("男");  
  66.   
  67.         // 将创建的子节点子节点的对象添加到子节点下  
  68.         nd.appendChild(name);  
  69.         nd.appendChild(age);  
  70.         nd.appendChild(sex);  
  71.   
  72.         // 将子节点添加到父节点  
  73.         nodeparent.appendChild(nd);  
  74.   
  75.         // 创建TransformerFactory对象  
  76.         TransformerFactory transformerFactory = TransformerFactory  
  77.                 .newInstance();  
  78.         // Transformer类用来将代表xml文件的Document对象装换位某种格式后进行输出  
  79.         // Transformer对象通过TransformerFactory获得  
  80.         Transformer transformer = transformerFactory.newTransformer();  
  81.         // 将处理后的Document对象重新写入 到另一个xml文件  
  82.         transformer.transform(new DOMSource(document), new StreamResult(  
  83.                 new File("src//c.xml")));  
  84.   
  85.     }  
  86.   
  87.     // 根据标签名称来查找所有改名称的节点对象  
  88.     public void findByElementName(Document document) {  
  89.         // 获取指定的标记名称的所有元素的节点集合  
  90.         NodeList nodelist = document.getElementsByTagName("teacher");  
  91.         System.out.println(nodelist.getLength());  
  92.         for (int i = 0; i < nodelist.getLength(); i++) {  
  93.             // 遍历得到集合中的每一个元素  
  94.             Node node = nodelist.item(i);  
  95.             System.out.println(node.getNodeName());  
  96.         }  
  97.     }  
  98.   
  99.     // 根据属性的值查找节点对象  
  100.     public Node findByName(Document document, String tagname) {  
  101.         // 获取指定的标记名称的所有元素的节点集合  
  102.         NodeList nodelist = document.getElementsByTagName("teacher");  
  103.         for (int i = 0; i < nodelist.getLength(); i++) {  
  104.             // 遍历得到集合中的每一个元素  
  105.             Element node = (Element) nodelist.item(i);  
  106.             // 获取指定的元素中的指定的属性  
  107.             Attr attr = node.getAttributeNode("name");  
  108.             // 判断属性的值  
  109.             if (attr.getValue().equals(tagname)) {  
  110.                 System.out.println(attr);  
  111.                 // 返回符合条件的元素  
  112.                 return node;  
  113.             }  
  114.         }  
  115.         return null;  
  116.     }  
  117.   
  118.     // 根据ID产找节点对象  
  119.     public Node findById(Document document, String id) {  
  120.         Node node = document.getElementById(id);  
  121.         System.out.println(node);  
  122.         return node;  
  123.     }  
  124.   
  125.     // 删除获取到的节点  
  126.     public void deleteNodeById(Document document, String id)  
  127.             throws TransformerException {  
  128.         // 获取要删除的节点对象  
  129.         Node node = document.getElementById(id);  
  130.         // 得到父节点后在删除子节点  
  131.         Node nod = node.getParentNode().removeChild(node);  
  132.         // 创建TransformerFactory对象  
  133.         TransformerFactory transformerFector = TransformerFactory.newInstance();  
  134.         // Transformer类用于把代表XML文件的Document对象转换为某种格式后进行输出  
  135.         // Transformer对象通过TransformerFactory获得  
  136.         Transformer transformer = transformerFector.newTransformer();  
  137.         // 调用transform();将Document对象重新写入一个XML文件中  
  138.         transformer.transform(new DOMSource(document), new StreamResult(  
  139.                 new File("src//a.xml")));  
  140.     }  
  141.   
  142.     // 更新指定数据  
  143.     public void updateNodeById(Document document, String id)  
  144.             throws TransformerException {  
  145.         // 根据id获取指定元素的节点对象  
  146.         Element node = document.getElementById(id);  
  147.         // 获取元素节点的id属性节点对象  
  148.         Attr attr = node.getAttributeNode("id");  
  149.         // 修改元素节点的属性值  
  150.         attr.setValue("x122");  
  151.   
  152.         // 获取该节点的对象的所有孩子节点对象name,age,sex节点  
  153.         NodeList nodelist = node.getChildNodes();  
  154.         // 遍历集合  
  155.         for (int i = 0; i < nodelist.getLength(); i++) {  
  156.             // 得到每一个子节点的实体  
  157.             Node no = nodelist.item(i);  
  158.             // 判断是否是元素节点对象  
  159.             if (no.getNodeType() == Node.ELEMENT_NODE) {  
  160.                 // 判断是否是name节点  
  161.                 if (no.getNodeName().equals("name")) {  
  162.                     // 设置name元素节点下的文本节点内容  
  163.                     no.setTextContent("董宏宇");  
  164.                 } else if (no.getNodeName().equals("age")) {  
  165.                     no.setTextContent("20");  
  166.                 } else if (no.getNodeName().equals("sex")) {  
  167.                     no.setTextContent("男");  
  168.                 } else {  
  169.                     System.out.println("没有可修改元素节点对象");  
  170.                 }  
  171.             }  
  172.         }  
  173.         // 创建TransformerFactory对象  
  174.         TransformerFactory transformerFactory = TransformerFactory  
  175.                 .newInstance();  
  176.         // Transformer类用于把代表xml文件的Document对象转换为某种格式后进行输出  
  177.         // transformer对象通过transformerFactory获得  
  178.         Transformer transformer = transformerFactory.newTransformer();  
  179.         // 把更改后的document对象重新写入到一个xml文件中  
  180.         transformer.transform(new DOMSource(document), new StreamResult(  
  181.                 new File("src//b.xml")));  
  182.     }  
  183.   
  184. }  

XML文件

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE classes SYSTEM "bin//dom_jiexi//java.dtd">  
  3. <classes>  
  4.     <java班 name="CSDNJava01班">  
  5.         <teachers>  
  6.             <teacher name="军哥" sex="男" age="28" />  
  7.             <teacher name="丽华" sex="女" age="28" />  
  8.         </teachers>  
  9.         <students>  
  10.             <student id="x121">  
  11.                 <name>Martin</name>  
  12.                 <sex></sex>  
  13.                 <age>28</age>  
  14.             </student>  
  15.         </students>  
  16.     </java>  
  17.     <!-- 注释0 -->  
  18.     <net班 name="CSDNNet01班">  
  19.         <teachers>  
  20.             <teacher name="Boss姚" sex="男" age="28" />  
  21.             <teacher name="石老师" sex="女" age="28" />  
  22.         </teachers>  
  23.     </net>  
  24.     <php班 name="CSDNPhp01班"></php>  
  25.     <ios班 name="CSDNIos01班"></ios>  
  26. </classes>  
  27. <!-- 对java.xml文件进行CRUD的操作 -->  
  28. <!-- 节点   
  29.         nodeName nodeValue nodeType   
  30. element 标签名                null        1   
  31. Attr    属性名               属性值                         2   
  32. text    #text   文本的值                       3   
  33.  -->  
DTD约束文件

[html]  view plain copy
  1. <!ELEMENT classes (java班,net班,php班,ios班)>  
  2. <!ELEMENT java班 (teachers?,students?)>  
  3. <!ELEMENT net班 (teachers?,students?)>  
  4. <!ELEMENT php班 (teachers?,students?)>  
  5. <!ELEMENT ios班 (teachers?,students?)>  
  6. <!ELEMENT teachers (teacher*)>  
  7. <!ELEMENT teacher EMPTY>  
  8. <!ELEMENT students (student*)>  
  9. <!ELEMENT student (name,sex,age)>  
  10. <!ATTLIST java班 name CDATA #IMPLIED>  
  11. <!ATTLIST net班 name CDATA #IMPLIED>  
  12. <!ATTLIST php班 name CDATA #IMPLIED>  
  13. <!ATTLIST ios班 name CDATA #IMPLIED>  
  14. <!ATTLIST teacher name CDATA #IMPLIED>  
  15. <!ATTLIST teacher sex CDATA #IMPLIED>  
  16. <!ATTLIST teacher age CDATA #IMPLIED>  
  17. <!ELEMENT name (#PCDATA)>  
  18. <!ELEMENT sex (#PCDATA)>  
  19. <!ELEMENT age (#PCDATA)>  
  20. <!ATTLIST student id ID #IMPLIED>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值