xml关于节点例子

xml关于节点例子

1.(基本操作)

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomTest {

 
 public static void main(String[] args) throws

Exception{
  DocumentBuilderFactory

factory=DocumentBuilderFactory.newInstance();//创建一个新的工

厂实例factory
  DocumentBuilder

builder=factory.newDocumentBuilder();  //得到一个dom解析器
  Document doc=builder.parse(new File

("src/shuiguo.xml"));   //得到dom对象
  
  childNodesLength(doc);
  Node shuiguo=doc.getElementsByTagName("水

果").item(0);
  listNodes(shuiguo);

 }

 public static void listNodes(Node shuiguo) {
  NodeList nodelist=shuiguo.getChildNodes();
  for(int i=0;i<nodelist.getLength();i++){
   System.out.println("节点的名

称"+nodelist.item(i).getNodeName()+"    节点的类

型:"+nodelist.item(i).getNodeType()+"    节点的

值:"+nodelist.item(i).getNodeValue());
  }
  
 }

 public static void childNodesLength(Document doc) {
  Node shuiguo=doc.getElementsByTagName("水

果").item(0);
  NodeList nodelist=shuiguo.getChildNodes();
  int count=0;
  for(int i=0;i<nodelist.getLength();i++){
   if(nodelist.item(i).getNodeType()

==Node.ELEMENT_NODE)
   count++;
  }
  System.out.println("水果中含有的元素节点的个

数是:"+count);
 }
}

2.(遍历)


import java.io.File;

import javax.xml.parsers.*;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomTest1 {

 public static void main(String[] args) throws

Exception {
  DocumentBuilderFactory factory =

DocumentBuilderFactory.newInstance();// 创建解析器工厂
  DocumentBuilder builder =

factory.newDocumentBuilder();// 创建解析器
  Document doc = builder.parse(new File

("src/shuiguo.xml")); // 得到文档对象

  Node node = doc.getElementsByTagName("水

果").item(0); // 得到文档的水果当中的第一个元素
  listNode(node);
 }

 public static void listNode(Node node) {
  System.out.println("节点名称:" +

node.getNodeName() + "    节点值:"
    + node.getNodeValue());      

                  //打印元素节点以及文本节点(根节点)的名称

及内容
  if (node.getNodeType() == Node.ELEMENT_NODE)

{
   NamedNodeMap map =

node.getAttributes();
   if (map != null) {
    for (int i = 0; i <

map.getLength(); i++) {
     System.out.println("

属性节点名称:" + map.item(i).getNodeName()
       + "  

属性节点的值:" + map.item(i).getNodeValue());
    }
   }
  }       

       //打

印属性节点(根节点)的名称及内容
  NodeList nodelist=node.getChildNodes();      
  if(nodelist.getLength()>0){
   for(int i=0;i<nodelist.getLength();i

++){
    listNode(nodelist.item(i));  

    //递归
   }
  }                                            

        //打印所有子节点的名称以及内容
 }
}

3.

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomTest2 {

 public static void main(String[] args) throws

Exception {
  DocumentBuilderFactory factory =

DocumentBuilderFactory.newInstance();// 创建解析器工厂
  DocumentBuilder builder =

factory.newDocumentBuilder();// 创建解析器
  Document doc = builder.parse(new File

("src/shuiguo.xml")); // 得到文档对象

 // find(doc);      //查找
 // findAtt(doc);    //查找属性
 // createElement(doc);   //作业:向节点当中添加

属性
 // removeElement(doc);    //作业:删除属性节点
 // updateElement(doc);
  updateAttribute(doc);    // 修改属性
  }

 public static void updateAttribute(Document doc)

throws Exception {
  Node apple=doc.getElementsByTagName("苹

果").item(0);
  if(apple.getNodeType()==Node.ELEMENT_NODE){
   Element element=(Element)apple;
  // element.getAttributeNode

("id").setNodeValue("111111");
  // element.getAttributeNode

("id").setTextContent("22222222222");
   element.getAttributeNode

("id").setValue("333333");
  }
  TransformerFactory

factory=TransformerFactory.newInstance();     //创建类型转换

工厂
  Transformer former=factory.newTransformer(); 

   //创建转换器
  former.transform(new DOMSource(doc), new

StreamResult(new File("src/shuiguo.xml")));   //将内存中的内

容写到文件中
 }

 public static void updateElement(Document doc) throws

Exception {
  Node grape=doc.getElementsByTagName("葡

萄").item(0);
  grape.setTextContent("grapegrapegrape");
  
  
  TransformerFactory

factory=TransformerFactory.newInstance();     //创建类型转换

工厂
  Transformer former=factory.newTransformer(); 

   //创建转换器
  former.transform(new DOMSource(doc), new

StreamResult(new File("src/shuiguo.xml")));   //将内存中的内

容写到文件中
 }

 public static void removeElement(Document doc) throws

Exception {
  Node grape=doc.getElementsByTagName("葡

萄").item(0);
  grape.getParentNode().removeChild(grape);
  
  TransformerFactory

factory=TransformerFactory.newInstance();     //创建类型转换

工厂
  Transformer former=factory.newTransformer(); 

   //创建转换器
  former.transform(new DOMSource(doc), new

StreamResult(new File("src/shuiguo.xml")));   //将内存中的内

容写到文件中
 }

 public static void createElement(Document doc) throws

Exception {
  NodeList shuiguos=doc.getElementsByTagName("

水果");
  Node shuiguo=shuiguos.item(1);
  Node grape=doc.createElement("葡萄");     //

创建葡萄标签
  Node grapevalue=doc.createTextNode("grape"); 

 //创建葡萄标签中的内容
  
  grape.appendChild(grapevalue);      //将内容

添加到标签
 // shuiguo.appendChild(grape);       //将葡萄标

签添加到水果标签中
  shuiguo.insertBefore(grape,

doc.getElementsByTagName("梨").item(1));
  
  TransformerFactory

factory=TransformerFactory.newInstance();     //创建类型转换

工厂
  Transformer former=factory.newTransformer(); 

   //创建转换器
  former.transform(new DOMSource(doc), new

StreamResult(new File("src/shuiguo.xml")));   //将内存中的内

容写到文件中
 }

 public static void findAtt(Document doc) {
  NodeList nodelist=doc.getElementsByTagName("

水果");   //获取水果元素
  Node node=nodelist.item(0);     //获取水果元

素中第一个
  if(node.getNodeType()==Node.ELEMENT_NODE){
   Element element=(Element)node;   //造


   String name=element.getAttribute

("id");
   System.out.println(name);
  }
 }

 public static void find(Document doc) {
  NodeList nodelist=doc.getElementsByTagName("

水果");   //获取水果元素
  Node node=nodelist.item(0);     //获取水果元

素中第一个
  String value=node.getTextContent();   //获取

节点的文本值
  String value1=node.getNodeValue();
  String value2=node.getChildNodes().item

(0).getNodeValue();
  System.out.println(value2); 
 }
}


<?xml version="1.0" encoding="UTF-8"?>
<食物>
<!--Dom中处处都是节点 元素节点 文本节点 属性节点 注释节点 -->
 <水果 id="2">
      <苹果 id="333333">不是中文</苹果>
      <香蕉>中文</香蕉>
      <梨>pear</梨>
 </水果>
 <水果 id="2">
     <苹果 id="1">不是中文</苹果>
     <梨>pear</梨>
     <葡萄>grapegrapegrape</葡萄>
 </水果>
 <水果 id="2">
      <苹果 id="1">不是中文</苹果>
      <香蕉>中文</香蕉>
  </水果>
</食物>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值