解析代码

来源:互联网 发布:网络拓扑检测 编辑:程序博客网 时间:2024/04/30 04:58

原创  在应用程序中对xml文件的各种操作 收藏

 首先是在应用程序中对xml文件的操作代码:>里面包括了对xml文件节点的增,删,改,查:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
import java.io.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;


public class DMLInXml
{
    //在指定位置插入节点的的数据
    public void insertXml(Document doc,String id)
    {
        Element student=doc.createElement("student");//创建一个子节点
        Element name=doc.createElement("name");//子节点的子元素
        Element age=doc.createElement("age");//子节点的子元素
        Element score=doc.createElement("score");//子节点的子元素
       
        Attr att=doc.createAttribute("id");//子节点的属性及名字
        att.setValue("s108");//属性的值
        student.setAttributeNode(att);//把属性加入此节点
       
        Text tname=doc.createTextNode("宋树林");//元素的文本节点(元素的值)
        Text tage=doc.createTextNode("24");//元素的文本节点(元素的值)
        Text tscore=doc.createTextNode("98");//元素的文本节点(元素的值)
       
       
        student.appendChild(name).appendChild(tname);//把元素添加到节点中
        student.appendChild(age).appendChild(tage);//把元素添加到节点中
        student.appendChild(score).appendChild(tscore);//把元素添加到节点中
       
        Element root=doc.getDocumentElement();//获得根元素
        Node n=(Node)root;//转换成节点(才可以插入子节点)
        Element e;
        NamedNodeMap nnm;//属性列表
        Attr a;
        NodeList list=doc.getElementsByTagName("student");//获得所有学生节点
        for(int i=0;i<list.getLength();i++)
        {
            e=(Element)list.item(i);//转换成元素才能取到它的属性
            nnm=e.getAttributes();//取到所有属性
            a=(Attr)nnm.item(0);//获得第一个属性(此属性必须能唯一区别学生)
            if(a.getValue().equals(id))
            {
                //在学号为S102的学生前插入刚才创建的学生节点
                n.insertBefore(((Node)student),list.item(i));
                return;
            }
        }
    }
   
    //修改指定节点的元素值
    public void updateXml(Document doc,String name,String score)
    {
        NodeList list=doc.getElementsByTagName("name");//获得所有name的节点
        Element e;
        for(int i=0;i<list.getLength();i++)
        {
            e=(Element)list.item(i);
            if(e.getFirstChild().getNodeValue().equals(name))//查找传入的名字的节点
            {
                e=(Element)e.getNextSibling().getNextSibling().getNextSibling().getNextSibling();//找到score元素
                e.getFirstChild().setNodeValue(score);//修改score的文本节点(score的值)
                return;
            }
        }
    }
   
    //删除指定的节点
    public void deleteXml(Document doc,String id)
    {
        Element root=doc.getDocumentElement();//获得根元素
        Node n=(Node)root;//转换成根节点
       
        NodeList list=doc.getElementsByTagName("student");//获得所有student的节点
        NamedNodeMap nnm;
        Attr att;
        Element e;
        for(int i=0;i<list.getLength();i++)
        {
            e=(Element)list.item(i);//把节点转换成元素
            nnm=e.getAttributes();//获得元素的所有属性
            att=(Attr)nnm.item(0);//获得属性id
            if(att.getValue().equals(id))//如果id的值为转入的id
            {
                n.removeChild(list.item(i));//删除此节点
                return;
            }
        }
    }
   
    public void saveXml(Document doc)
    {
        try
        {
        DOMSource dom=new DOMSource(doc);//创建一个输入源
        StreamResult sr=new StreamResult(new File("DmlXml.xml"));//创建一个输出流
        TransformerFactory tf=TransformerFactory.newInstance();
        Transformer tran=tf.newTransformer();
        tran.transform(dom,sr);//写入文件
        }
        catch(Exception err)
        {
            err.printStackTrace();
        }
    }
   
    public void printXml(Document doc)
    {
        NodeList list=doc.getElementsByTagName("*");//获得所有节点
        Element e;
        NamedNodeMap nnm;
        Attr att;
        for(int i=0;i<list.getLength();i++)
        {
            e=(Element)list.item(i);//获得每个节点并转换成元素
            System.out.println("<"+e.getTagName()+">"+e.getFirstChild().getNodeValue());//输出元素的的名字和值
            nnm=e.getAttributes();//获得元素的所有属性
            if(nnm!=null)
            {
                for(int j=0;j<nnm.getLength();j++)
                {
                    att=(Attr)nnm.item(j);
                    System.out.println("属性:"+att.getName()+"值"+att.getValue());//输入每个属性的名字和值
                }
            }
        }
    }
   
    public static void main(String[] args) throws Exception
    {
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        DocumentBuilder db=dbf.newDocumentBuilder();
        Document doc=db.parse(new File("musicclass.xml"));//DOM API解析XML文件
        DMLInXml obj=new DMLInXml();//new 一个实例
        System.out.println("打印原始XML数据");
        obj.printXml(doc);
       
       
        //在指定位置插入节点的的数据
        obj.insertXml(doc,"s102");
        System.out.println("在指定位置插入节点的的数据");
        obj.printXml(doc);
       
       
        //修改某节点中元素的值
        obj.updateXml(doc,"笑林","50");
        System.out.println("修改后的数据");
        obj.printXml(doc);
       
       
        //删除指定的节点
        obj.deleteXml(doc,"s102");
        System.out.println("删除节点后的数据");
        obj.printXml(doc);
       
       
        //保存修改后的XML数据
        obj.saveXml(doc);
        System.out.println("文件保存完毕");
    }
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
下面是参考的xml文档
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<?xml version="1.0" encoding="UTF-8"?>
<musicclass>
    <student id="s101">
        <name>李华</name>
        <age>12</age>
        <score>92</score>
    </student>
    <student id="s102">
        <name>笑林</name>
        <age>22</age>
        <score>82</score>
    </student>
    <student id="s103">
        <name>王明</name>
        <age>18</age>
        <score>10</score>
    </student>
</musicclass>