dom的cud操作

创建一个java.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classes SYSTEM "bin//parser//java.dtd">
<classes>
  <java班 name="CSDNJava01班">
    <teachers>
      <teacher name="军哥" sex="男" age="28" />
      <teacher name="刘丽华" sex="女" age="28" />
    </teachers>
    <students>
      <student id="M121780">
        <name>张根硕</name>
        <sex>男</sex>
        <age>28</age>
      </student>
    </students>
  </java班>
  <!-- 注释0 -->
  <net班 name="CSDNNet01班">
    <teachers>
      <teacher name="Boss姚" sex="男" age="28" />
      <teacher name="石艳芳" sex="女" age="28" />
    </teachers>
  </net班>
  <php班 name="CSDNPhp01班"></php班>
  <ios班 name="CSDNIos01班"></ios班>
</classes>
java.dtd
 
<!ELEMENT classes (java班,net班,php班,ios班)>
<!ELEMENT java班 (teachers?,students?)>
<!ELEMENT net班 (teachers?,students?)>
<!ELEMENT php班 (teachers?,students?)>
<!ELEMENT ios班 (teachers?,students?)>
<!ELEMENT teachers (teacher*)>
<!ELEMENT teacher EMPTY>
<!ELEMENT students (student*)>
<!ELEMENT student (name,sex,age)>
<!ATTLIST java班 name CDATA #IMPLIED>
<!ATTLIST net班 name CDATA #IMPLIED>
<!ATTLIST php班 name CDATA #IMPLIED>
<!ATTLIST ios班 name CDATA #IMPLIED>
<!ATTLIST teacher name CDATA #IMPLIED>
<!ATTLIST teacher sex CDATA #IMPLIED>
<!ATTLIST teacher age CDATA #IMPLIED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST student id ID #IMPLIED>

获得各节点类型的值

public class Test01 {
	//@Test
	public void testTypeValue(){
		System.out.println("元素节点的类型值:"+Node.ELEMENT_NODE);
		System.out.println("属性节点的类型值:"+Node.ATTRIBUTE_NODE);
		System.out.println("文本节点的类型值:"+Node.TEXT_NODE);
		System.out.println("注释节点的类型值:"+Node.COMMENT_NODE);
		System.out.println("节点声明的类型值:"+Node.DOCUMENT_TYPE_NODE);
		System.out.println("实体节点的类型值:"+Node.ENTITY_NODE);
		System.out.println("文档节点类型值:"+Node.DOCUMENT_NODE);
	}

根据标签的名称查找所有该名称的节点对象

public void findNode(Document document){
		NodeList nodeList=document.getElementsByTagName("teacher");
		for(int i=0;i<nodeList.getLength();i++){
			Node node=nodeList.item(i);
			System.out.println(node.getNodeName());
		}
	}

根据属性的值查询某个节点对象

public Node findByAttrValue(Document document,String value){
		NodeList nodeList=document.getElementsByTagName("teacher");
		for(int i=0;i<nodeList.getLength();i++){
			Element node=(Element) nodeList.item(i);
			Attr attr=node.getAttributeNode("name");
			if(attr.getNodeValue().equals(value)){
				return node;
			}
			System.out.println("----");
		}
		return null;
	}
public void test() throws SAXException, IOException, ParserConfigurationException{
		Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
		findByAttrValue(document,"Boss姚");


根据id获取某个节点对象

public Node findNodeById(Document document,String id){
		Node node= document.getElementById(id);
		System.out.println(node.getNodeName());
		return node;
		//return document.getElementById(id);
		
	}
public void test() throws SAXException, IOException, ParserConfigurationException{
		Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
		findNodeById(document, "M121780");

删除某个节点对象

public void deleteNodeById(Document document,String id) throws TransformerException{
		Node node=document.getElementById(id);
		//是通过父节点调用removeChild(node)把子节点删除掉
	 	Node node1=node.getParentNode().removeChild(node);
	 	System.out.println(node1+"----"+node);
	 	
	 	TransformerFactory transformerFactory=TransformerFactory.newInstance();
	 	Transformer transformer=transformerFactory.newTransformer();
	 	//文档对象,写出的文件的StreamResult对象
	 	transformer.transform(new DOMSource(document), new StreamResult(new File("src//a.xml")));
	
	}
public void test() throws SAXException, IOException, ParserConfigurationException{
		Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
		try {
			deleteNodeById(document, "M121780");
		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			System.out.println("发现异常了---");
			e.printStackTrace();
		}

a.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><classes>
  <java班 name="CSDNJava01班">
    <teachers>
      <teacher age="28" name="军哥" sex="男"/>
      <teacher age="28" name="刘丽华" sex="女"/>
    </teachers>
    <students>
      
    </students>
  </java班>
  <!-- 注释0 -->
  <net班 name="CSDNNet01班">
    <teachers>
      <teacher age="28" name="Boss姚" sex="男"/>
      <teacher age="28" name="石艳芳" sex="女"/>
    </teachers>
  </net班>
  <php班 name="CSDNPhp01班"/>
  <ios班 name="CSDNIos01班"/>
</classes>


 

更新某个节点

public void updateNodeById(Document document,String id) throws TransformerException{
		Element node=document.getElementById(id);
		Attr attr=node.getAttributeNode("id");
		attr.setValue("M121781");
		//是通过父节点调用removeChild(node)把子节点删除掉
	 	NodeList nodelist=node.getChildNodes();
	 	for(int i=0;i<nodelist.getLength();i++){
	 		Node n=nodelist.item(i);
	 		if(n.getNodeType()==Node.ELEMENT_NODE){
	 			if(n.getNodeName().equals("name")){
	 				n.setTextContent("张三");
	 			}else if(n.getNodeName().equals("age")){
		 			n.setTextContent("34");
		 		}else if(n.getNodeName().equals("sex")){
		 			n.setTextContent("男");
		 		}else{
		 			System.out.println("不做处理");
		 		}
	 		}
	 		
	 	}
	 	TransformerFactory transformerFactory=TransformerFactory.newInstance();
	 	Transformer transformer=transformerFactory.newTransformer();
	 	//文档对象,写出的文件的StreamResult对象
	 	transformer.transform(new DOMSource(document), new StreamResult(new File("src//b.xml")));
	
	}
public void test() throws SAXException, IOException, ParserConfigurationException{
		Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
		try {
			updateNodeById(document, "M121780");
		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			System.out.println("发现异常了---");
		  e.printStackTrace();
		}

 b.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><classes>
  <java班 name="CSDNJava01班">
    <teachers>
      <teacher age="28" name="军哥" sex="男"/>
      <teacher age="28" name="刘丽华" sex="女"/>
    </teachers>
    <students>
      <student id="M121781">
        <name>张三</name>
        <sex>男</sex>
        <age>34</age>
      </student>
    </students>
  </java班>
  <!-- 注释0 -->
  <net班 name="CSDNNet01班">
    <teachers>
      <teacher age="28" name="Boss姚" sex="男"/>
      <teacher age="28" name="石艳芳" sex="女"/>
    </teachers>
  </net班>
  <php班 name="CSDNPhp01班"/>
  <ios班 name="CSDNIos01班"/>
</classes>


 

在指定的节点下方添加一个新的节点

public void addNodeById(Document document,String id) throws TransformerException{
		Element node=document.getElementById(id);
		Node parentNode=node.getParentNode();
		
		Element nd=document.createElement("student");
		nd.setAttribute("id", "M121782");
		Node name=document.createElement("name");
		name.appendChild(document.createTextNode("李斯"));
		Node age=document.createElement("age");
		age.appendChild(document.createTextNode("20"));
		Node sex=document.createElement("sex");
		sex.appendChild(document.createTextNode("男"));
		
		nd.appendChild(name);
		nd.appendChild(age);
		nd.appendChild(sex);
		parentNode.appendChild(nd);
	 	TransformerFactory transformerFactory=TransformerFactory.newInstance();
	 	Transformer transformer=transformerFactory.newTransformer();
	 	//文档对象,写出的文件的StreamResult对象
	 	transformer.transform(new DOMSource(document), new StreamResult(new File("src//c.xml")));
	
	}
public void test() throws SAXException, IOException, ParserConfigurationException{
		Document document=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.getClass().getClassLoader().getResourceAsStream("parser//java.xml"));
		try {
			addNodeById(document, "M121780");
		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			System.out.println("发现异常了---");
			e.printStackTrace();
		}

c.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><classes>
  <java班 name="CSDNJava01班">
    <teachers>
      <teacher age="28" name="军哥" sex="男"/>
      <teacher age="28" name="刘丽华" sex="女"/>
    </teachers>
    <students>
      <student id="M121780">
        <name>张根硕</name>
        <sex>男</sex>
        <age>28</age>
      </student>
    <student id="M121782"><name>李斯</name><age>20</age><sex>男</sex></student></students>
  </java班>
  <!-- 注释0 -->
  <net班 name="CSDNNet01班">
    <teachers>
      <teacher age="28" name="Boss姚" sex="男"/>
      <teacher age="28" name="石艳芳" sex="女"/>
    </teachers>
  </net班>
  <php班 name="CSDNPhp01班"/>
  <ios班 name="CSDNIos01班"/>
</classes>












 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值