通过.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();
人生永远无法回头,就连这平淡不惊的一幕,终有一日也会碎落满地

浙公网安备 33010602011771号