zoukankan      html  css  js  c++  java
  • Java中的XML

      XML是一种可扩展的标记语言,可扩展就是<>内的东西可以自己定义,可以随便写。标记语言就是加了<>符号的 。HTML是超文本标记语言,不可以拓展,因为你写个<p> 浏览器知道这个是段落,你写个<shuyunquan>浏览器就不认识了,所以不可拓展

    讲讲xml的书写格式:

    1.开头固定

    2.只能有一个根元素

    3.没了

    <?xml version="1.0" encoding="UTF-8"?>
    <Students>
        <student>
            <name>许嵩</name>
            <age>32</age>
        </student>
        <student>
            <name>蜀云泉</name>
            <age>23</age>
        </student>
    </Students>

    我写了一个,开头的第一行是固定的,当然也可以多写。这个是告诉别人,我是xml文件

    下面来介绍一下Java是怎么操作xml的,也可以说是怎么操作DOM的,以前一直听说DOM,Dom就是不知道是什么,原来DOM就是内存中的一个树形结构的数据称谓,xml的数据就是树形结构的,在内存中就是DOM

    这篇文章只是介绍一下,具体操作处理XML文件还是要使用Dom4j,看这篇文章

    一、Java读取xml

    比如上面的xml文件,我想获取第二个student元素的name里面的文本,操作如下:

        private File f=new File("F:/Study Java/ch1helloworld/src/main/java/com/StadyJava/day2/xmldemo.xml");
    
        public void testDocument() throws ParserConfigurationException, IOException, SAXException {
            //1.
            DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
            //2.
            DocumentBuilder builder=factory.newDocumentBuilder();
            //3 经过这3步获取到了文档
            Document doc=builder.parse(f);
    
            //上面的三步可以写成这样
            //Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
    
            //已经获取了文档对象,现在获取xml的根元素
            Element root=doc.getDocumentElement();
    
            //获取第二个student 因为返回的是父类型Node,所以需要强转一下
            Element student2=(Element) root.getElementsByTagName("student").item(1);
    
            //获取第二个student元素的子元素name
            Element name2=(Element) student2.getElementsByTagName("name").item(0);
    
            //获取name元素的文本内容
            System.out.println(name2.getTextContent());
    
        }

    1.获取xml文件

    2.获取根元素students

    3.获取根元素下面的第二个student元素

    4.获取第二个student元素的name元素

    5.获取name的文本内容

    二、Java更改xml

    这里我们准备把许嵩的年龄改为18

    其实操作和上面的读取差不多,只不过多了一个从内存更新到磁盘的步骤

     public void setxml() throws  Exception {
    
            //获取文档对象
            Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
    
            //已经获取了文档对象,现在获取xml的根元素
            Element root=doc.getDocumentElement();
    
            //获取第一个student 因为返回的是父类型Node,所以需要强转一下
            Element student1=(Element) root.getElementsByTagName("student").item(0);
    
            //获取第一个student元素的子元素age
            Element age1=(Element) student1.getElementsByTagName("age").item(0);
    
            //更新age元素的文本内容,这里仅仅的更新了内存中的DOM,还要更新到磁盘的xml源文件
            age1.setTextContent("18");
    
            //同步内存中的数据到磁盘中的源文件
            Transformer trans=TransformerFactory.newInstance().newTransformer();
            Source xmlSource=new DOMSource(doc); //内存中的DOM
            Result outputTarget=new StreamResult(f); //磁盘中的xml文件
            trans.transform(xmlSource,outputTarget);//从内存更新到磁盘
    
        }

    三、Java插入xml数据 

    要插入新数据,要创建元素,要给元素赋值,要给元素之间绑定关系

    public void Insertxml() throws Exception{
            //获取文档对象
            Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
    
            //已经获取了文档对象,现在获取xml的根元素
            Element root=doc.getDocumentElement();
    
            //创建一个student元素以及子元素,注意,子元素和student之间还需要绑定
            Element student=doc.createElement("student");
            Element name=doc.createElement("name");
            Element age=doc.createElement("age");
            //给student元素赋值
            name.setTextContent("林俊杰");
            age.setTextContent("33");
            //把子元素和student之间进行绑定
            student.appendChild(name);
            student.appendChild(age);
            //把student元素和DOM的root根节点绑定起来
            root.appendChild(student);
    
            //更新
            Transformer trans=TransformerFactory.newInstance().newTransformer();
            Source xmlSource=new DOMSource(doc); //内存中的DOM
            Result outputTarget=new StreamResult(f); //磁盘中的xml文件
            trans.transform(xmlSource,outputTarget);//从内存更新到磁盘
        }

    就是这样,代码更改的就中间那一段。新增数据后是没有空格格式的,所以数据都在一行,看起来不美观

    四、Java删除xml元素

    还是,先操作DOM,然后再更新到磁盘

     public void deletexml() throws Exception {
            //获取文档对象
            Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(f);
            //已经获取了文档对象,现在获取xml的根元素
            Element root=doc.getDocumentElement();
            //获取要删除的元素,记得强转
            Element student=(Element) root.getElementsByTagName("student").item(2);
            //删除
            root.removeChild(student);
            //同步操作
            Transformer trans=TransformerFactory.newInstance().newTransformer();
            Source xmlSource=new DOMSource(doc); //内存中的DOM
            Result outputTarget=new StreamResult(f); //磁盘中的xml文件
            trans.transform(xmlSource,outputTarget);//从内存更新到磁盘
    
        }
  • 相关阅读:
    发现pythonWin里面的一个地方挺别扭
    细节-质量-态度
    对于Borland出售IDE业务的一点感想
    ReView100遍?!
    代码生成原则Top10
    使用asp.net进行多关键字查询的例子
    代码生成FAQ(翻译)
    msdn中文上的几篇有用的sqlServer2000的文章
    RSS 阅读工具Omea Reader
    Ubuntu18.04 安装Postgresql12
  • 原文地址:https://www.cnblogs.com/yunquan/p/10070614.html
Copyright © 2011-2022 走看看