加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml解析――增删改查操作后将其修改结果保存

发布时间:2020-12-16 08:29:08 所属栏目:百科 来源:网络整理
导读:一、可扩展标记语言xml:Extensible Markup Language 1、XML的作用:1)统一数据传输的格式。2)做小型数据库[文件型数据库]。3)做配置文件 .ini .propertity .xml .cfg 2、XML文件的基本格式: 标签:分为双标签和单标签,双标签的开头和结尾标签名必须一

一、可扩展标记语言xml:Extensible Markup Language
1、XML的作用:1)统一数据传输的格式。2)做小型数据库[文件型数据库]。3)做配置文件 .ini .propertity .xml .cfg
2、XML文件的基本格式:
标签:分为双标签和单标签,双标签的开头和结尾标签名必须一致,大小写一样,/ 开头的是结尾标签,单标签必须在 > 前加上 / 来结尾,单标签中不能放文本。
属性:在开始标签中定义一些名值对,值一定是字符串
3、XML文件的基本构成:
1)在第一行是XML声明 <?xml version="1.0" encoding="UTF-8" ?>
2)必须且只能有一对根标签
3)标签可以一层一层嵌

二、写一个简单的xml文档stus.xml然后用Dom进行解析。下载
DOM : Document Object Model 文档对象模型
DOM解析的基本思路:将整个XML文件一次性读入内存,将整个XML看做一棵文档树,XML中的每一个标签,属性,文本都看做是树上的一个结点,然后可以对结点进行增删改查的操作。
已经编辑好的stus.xml文档

Java代码下载

  1. <?xmlversion="1.0"encoding="UTF-8"?>

  2. <stusClass="1401">

  3. <stunum="01">

  4. <name>张三</name>

  5. <age>19</age>

  6. <sex>男</sex>

  7. </stu>

  8. <stunum="02">

  9. <name>李四</name>

  10. <age>20</age>

  11. <sex>女</sex>

  12. </stu>

  13. <stunum="03">

  14. <name>王五</name>

  15. <age>21</age>

  16. <sex>男</sex>

  17. </stu>

  18. </stus>


三、开始解析
创建解析工厂

  • //得到解析工厂对象

  • DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

  • //生产一个解析器对象

  • DocumentBuilderbuilder=factory.newDocumentBuilder();

  • //开始解析xml文件,得到的解析结果是一个Document对象,Document对象叫做文档树对象

  • Documentdocument=builder.parse("stus.xml");


  • 1、增加节点
    基本思路:首先创建一个新的元素节点,将元素节点追加到根节点后面,设置其节点属性。创建标签,设置标签文本内容,最后将新标签添加到新的元素节点中。
    代码:

    Java代码

      //创建一个新的元素节点

    1. Elementstu=dom.createElement("stu");

    2. //将元素节点追加到根节点后面

    3. root.appendChild(stu);

    4. //设置节点属性

    5. stu.setAttribute("num","04");

    6. //创建标签

    7. Elementname=dom.createElement("name");

    8. Elementage=dom.createElement("age");

    9. Elementsex=dom.createElement("sex");

    10. //设置标签文本内容

    11. name.setTextContent("赵六");

    12. age.setTextContent("19");

    13. sex.setTextContent("女");

    14. //把标签添加到新的元素节点stu中

    15. stu.appendChild(name);

    16. stu.appendChild(age);

    17. stu.appendChild(sex);


    2、删除节点
    基本思路:获得要删除的节点,然后得到节点的属性值,与要删除的节点的属性值进行比较,如果该属性值对应的节点存在则移除该节点。
    //获得根节点

  • Elementroot=(Element)dom.getFirstChild();

  • //获得所有stu节点

  • NodeListlist=dom.getElementsByTagName("stu");

  • for(inti=0;i<list.getLength();i++){

  • Nodenode=list.item(i);

  • if(nodeinstanceofElement){

  • Elemente=(Element)node;

  • //得到节点的属性值,与要删除的结点的属性值进行比较,然后移除该属性值对应的结点

  • Stringnum=e.getAttribute("num");

  • if(num.equals("02")){

  • root.removeChild(e);

  • break;

  • }

  • }

  • }


  • 3、修改节点
    基本思路:获得要修改的节点,修改其属性值,然后获得该节点下的标签,修改标签中的文本内容。
    //修改节点属性

  • intj=0;j<list.getLength();j++){

  • Nodeno=list.item(j);

  • if(noinstanceofElement){

  • Elementel=(Element)no;

  • Stringn=el.getAttribute("num");

  • if(n.contains("01")){

  • el.setAttribute("num","05");

  • //修改标签值

  • NodeListli=el.getChildNodes();

  • intx=0;x<li.getLength();x++){

  • Noded=li.item(x);

  • if(dinstanceofElement){

  • Elementee=(Element)d;

  • StringnoN=ee.getNodeName();

  • if(noN.equals("name")){

  • ee.setTextContent("小白");

  • }elseif(noN.equals("age")){

  • ee.setTextContent("11");

  • }if(noN.equals("sex")){

  • ee.setTextContent("男");

  • }

  • }

  • }

  • }


  • 4、查找节点
    基本思路:获得所有的节点,用 需要查找的结点的属性值与所有节点进行比较,如果该节点存在,就打印该节点的属性值及其节点下标签的内容。

  • instanceofElement){

  • Elementel=(Element)no;

  • Stringn=el.getAttribute("num");

  • //查找节点,显示其属性值及标签内容

  • if(n.equals("03")){

  • System.out.println(no.getNodeName()+"t"+n+no.getTextContent());

  • }

  • }

  • }


  • 4、保存修改后的xml文档
    基本思路:先将内存中的Document对象写到xml文件中,然后将整个Document对象作为要写入xml文件的数据源,最后将数据源写入目标文件。
    //将内存中的Document对象写到xml文件中

  • TransformerFactorytf=TransformerFactory.newInstance();

  • Transformerformer=tf.newTransformer();

  • former.setParameter("version","1.0");

  • former.setParameter("encoding","GBK");

  • //将整个Document对象作为要写入xml文件的数据源

  • DOMSourcexmlSource=newDOMSource(dom);

  • //要写入的目标文件

  • StreamResultoutputTarget=new

  • StreamResult(newFile("F:stus2.xml"));

  • former.transform(xmlSource,outputTarget);

  • (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读