通过.java文件操作.xml文件内容(增删改查)

java对xml节点属性的获取和改变

首先得导入jar包

dom4j_1.6.1.jar
jaxen-1.1.2.jar (导入用于dom4j Xpath方式解析xml)

以下是XML文档

<?xml version="1.0" encoding="GBK"?>

<persons> 
  <person id="0"> 
    <name>翠花</name>  
    <age>18</age>  
    <sex>女</sex> 
  </person>  
  <person id="1"> 
    <name>这里是修改的id为1的节点下的name元素值</name>  
    <age>20</age>  
    <sex>男</sex> 
  </person> 
</persons>

以下为.java文件

老版解析xml方法

//需要理解背诵
//设置一个url变量重复利用(说白了url记录了“你需要读取的xml”,设置为全局变量)
static File url=new Flie("你需要读取的xml");

//读取xml信息
SAXEeader saxReader new SAXReader();
Document document=saxReader.read(url);//docment 其实就是一个绝对路径

//通过文档对象docment获取根结点
Element root=docment.getRootElement();
//获取根节点内某结点
--root.attribut("id")
// 获取跟节点下的子节点(不包含子字节的子字节)
root.elements();//这里建议用list装
List<Element> list =root.element();
//获取到的内容([org.dom4j.tree.DefaultElement@6ce253f1 [Element: <person attributes: [org.dom4j.tree.DefaultAttribute@53d8d10a [Attribute: name id value "0"]]/>], org.dom4j.tree.DefaultElement@e9e54c2 [Element: <person attributes: [org.dom4j.tree.DefaultAttribute@65ab7765 [Attribute: name id value "1"]]/>]]
)
//获取第一个字节
Element element_01=list.get(0);
//获取element_01字节下的元素
element_01.elementText("需要获取的元素")
//!注意:只能获取一次节点值(第二次即使list.get()改变也还会会获得和第一次相同的值)
以上获取字节相当麻烦所以看下文(需要 jaxen-1.1.2.jar)

dom4j Xpath方式解析xml

查看

//老样子通过你的xml获取document(文档)对象
SAXReader saxreader =new SAXReader();
Document document=saxreader.read(url);
//获取id为1的节点下的name属性
document.selectSingleNode("/persones/person[@id='1']/name[1]")
system.out.println(name.getText())
//name.getText()及查看name的值

//通过根节点root ,document获取文档中属性键值对
 Element contactElem = root.element("person");
//遍历某个节点的所有属性    
 for(Iterator it = contactElem.attributeIterator();it.hasNext();){    
        Attribute conAttr= (Attribute)it.next();
        String conTxt = conAttr.getValue(); 
        String conAttrName = conAttr.getName();
      System.out.println(conAttrName+" = "+conTxt);
                      }
          
//遍历某个节点的所有标签
     for(Iterator it2=contactElem.elementIterator();it2.hasNext();){ 
         Element contactElem2=(Element)it2.next();     
        System.out.println(contactElem2.getName()+":"+contactElem2.getText()+":");         
       } 

修改

 1 //老样子通过你的xml获取document(文档)对象
 2 SAXReader saxreader =new SAXReader();
 3 Document document=saxreader.read(url);
 4 //获取id为1的节点下的name属性(这里可以改为其他)
 5 document.selectSingleNode("/persones/person[@id='1']/name[1]")
 6 //进行修改
 7 name.setText("修改以后内容")
 8 
 9 // 注意:XML文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中
10 //写入中文时有乱码问题这里加入以下代码
11 OutputFormat format = OutputFormat.createPrettyPrint();
12 format.setEncoding("GBK");
13 //将内存数据关联给一个字符输出流
14 XMLWriter writer = new XMLWriter(new FileWriter(url),format);
15 //写入
16 writer.write(document);
17 //关闭
18 wirter.close();

增加

 1 // 获取一个Document对象
 2 SAXReader saxReader = new SAXReader();
 3 Document doc = saxReader.read(url);
 4 //获取根节点
 5 Element root = doc.getRootElement();
 6 //增加一个字节
 7 Element person=root.addElement("需要增加的根节点下的标签名")
 8 //增加值和属性到当前标签下
 9             person.addElement("name").setText("小星");
10         person.addElement("age").setText("16");
11         person.addElement("sex").setText("女");
12 
13 // 注意:XML文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中
14 //写入中文时有乱码问题这里加入以下代码
15 OutputFormat format = OutputFormat.createPrettyPrint();
16 format.setEncoding("GBK");
17 //将内存数据关联给一个字符输出流
18 XMLWriter writer = new XMLWriter(new FileWriter(url),format);
19 //写入
20 writer.write(document);
21 //关闭
22 wirter.close();  

删除

 1 // 获取一个Document对象
 2 SAXReader reader = new SAXReader();
 3 Document doc = reader.read(url);        
 4         
 5 // 通过文档对象doc获取文档中的根节点
 6 Element root = doc.getRootElement();
 7 //获取第2个节点
 8 Node person = root.selectSingleNode("/persons/person[2]");
 9 //移出节点
10 root.remove(person);
11 
12 // 注意:XML文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中
13 //写入中文时有乱码问题这里加入以下代码
14 OutputFormat format = OutputFormat.createPrettyPrint();
15 format.setEncoding("GBK");
16 //将内存数据关联给一个字符输出流
17 XMLWriter writer = new XMLWriter(new FileWriter(url),format);
18 //写入
19 writer.write(document);
20 //关闭
21 wirter.close();  

 

posted @ 2021-06-07 09:01  这里那里  阅读(350)  评论(0)    收藏  举报
Live2D