DOM4j解析xml文件
// 创建解析器 SAXReader reader = new SAXReader(); // 利用解析器读入xml文档 Document dom = reader.read(xmlFilePath); // 获取文档的根节点 Element root = dom.getRootElement();
DOM4j操作节点
// 1.取得某个节点的子节点. Element node = root.element("书名"); // 获取节点为 "书名" 的集合 List elementList = root.elements("书名"); // 获取所有节点集合 // List elementList = root.elements(); // 2.获取节点的名字 node.getName(); // 3.设置节点的名字 node.setName("新名字"); // 4.取得节点的文字(标签体) String text = node.getText(); // 5.设置节点的文字(标签体) node.setText("aaa"); // 6.添加子节点. Element ele = DocumentHelper.createElement("新节点"); node.add(ele); ele.addElement("age"); // 7.删除子节点节点(父节点移除子节点) // parentElm.remove(childElm); // 8获取节点类型 node.getNodeType(); // 9.获取父节点 node.getParent();
DOM4j操作属性
// 1.取得某节点对象的某属性 // 根据名称找属性 Attribute attr = ele.attribute("aaa"); // 根据索引找属性 // Attribute attr= ele.attribute(0); List list = ele.attributes(); String value = ele.attributeValue("aaa"); Iterator it = ele.attributeIterator(); // 2.设置某节点的属性 ele.add(attr); ele.addAttribute("新属性", "新属性值"); // 设置所有集合节点的属性 ele.setAttributes(list); // 3.删除某属性 ele.remove(attr); // 4.取得属性的名、值 String name = attr.getName(); String value = attr.getValue(); // 5.设置某属性的名、值 attr.setName("新名字"); attr.setValue("新值");
DOM4j字符串和XML的转换
// 1.将字符串转化为XML String text = "<members> <member>sitinspring</member></members>"; Document document = DocumentHelper.parseText(text); // 2.将文档或节点的XML转化为字符串 String xmlStr = node.asXML();
DOM4j将文档写入XML文件
/** * 将内存中的dom树会写到xml文件中,从而使xml中的数据进行更新 * * @param dom * @param savePath * @throws Exception */ public void WriteXML(Document dom, String savePath) throws Exception { // 方式一 // 注意:FileWriter默认使用操作系统本地码表即gb2312编码,并且无法更改。 // 此时可以使用OutputStreamWriter(FileOutputStream("filePath"),"utf-8");的方式自己封装一个指定码表的Writer使用,从而解决乱码问题。 // FileWriter writer = new FileWriter("book.xml"); // dom.write(writer); // writer.flush(); // writer.close(); // 方式二 // 注意:使用这种方式输出时,XMLWriter首先会将内存中的docuemnt翻译成UTF-8格式的document,在进行输出,这时有可能出现乱码问题。 // 可以使用OutputFormat 指定XMLWriter转换的编码为其他编码。 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); FileOutputStream fos = new FileOutputStream(savePath); XMLWriter writer = new XMLWriter(fos, format); writer.write(dom); writer.close(); }
综合例子
/** * 新增一个节点 * * @param xmlFilePath * @throws Exception */ public void AddDom(String xmlFilePath) throws Exception { // 创建解析器 SAXReader reader = new SAXReader(); // 利用解析器读入xml文档 Document dom = reader.read(xmlFilePath); // 获取文档的根节点 Element root = dom.getRootElement(); // 凭空创建<特价>节点,设置标签体 Element element = CreateElement("特价", "40.0元"); // 获取父标签<书>将特价节点挂载上去 // root.add(element); root.element("书").element("特价").add(element); WriteXML(dom, xmlFilePath); } /** * 创建一个XML 节点 * * @param elementNmae * 节点名称 * @param elementValue * 节点值 * @return */ public Element CreateElement(String elementNmae, String elementValue) { Element element = DocumentHelper.createElement(elementNmae); element.setText(elementValue); return element; } /** * 修改一个节点值 * * @param xmlFilePath * @throws Exception */ public void updateDom(String xmlFilePath) throws Exception { SAXReader reader = new SAXReader(); Document dom = reader.read(xmlFilePath); Element root = dom.getRootElement(); root.element("书").element("特价").setText("4.0元"); WriteXML(dom, xmlFilePath); } /** * 删除指定节点 * * @param xmlFilePath * @throws Exception */ public void deleteDom(String xmlFilePath) throws Exception { SAXReader reader = new SAXReader(); Document dom = reader.read(xmlFilePath); Element root = dom.getRootElement(); DeleteDom(root.element("书"), "特价"); WriteXML(dom, xmlFilePath); } /** * 删除指定节点 * * @param parentDom * 要删除的节点的上一级节点 * @param elementName * 要删除的节点名称 */ public void DeleteDom(Element parentDom, String elementName) { Element price2Ele = parentDom.element(elementName); price2Ele.getParent().remove(price2Ele); } /** * 查找指定节点值 * * @param xmlFilePath * @throws Exception * */ public String FindDom(String xmlFilePath) throws Exception { SAXReader reader = new SAXReader(); Document dom = reader.read(xmlFilePath); Element root = dom.getRootElement(); List<Element> list = root.elements(); Element book2Ele = list.get(1); String text = book2Ele.element("书名").getText(); System.out.println(text); return text; } /** * 操作Dom节点属性 * * @throws Exception */ public void HandleDomAttr(String xmlFilePath) throws Exception { SAXReader reader = new SAXReader(); Document dom = reader.read(xmlFilePath); Element root = dom.getRootElement(); Element bookEle = root.element("书"); // bookEle.addAttribute("出版社", "传智出版社");//增加属性 // String str = bookEle.attributeValue("出版社");//修改属性 // 删除属性 DeleteElementAttr(bookEle, "出版社"); WriteXML(dom, xmlFilePath); } /** * 删除节点属性 * * @param element */ public void DeleteElementAttr(Element element, String attrName) { Attribute attr = element.attribute(attrName); attr.getParent().remove(attr); }
版权声明:本文为博主原创文章,未经博主允许不得转载。