zoukankan      html  css  js  c++  java
  • dom4j修改,获取,增加xml中某个元素的属性值

    XML文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <vrvscript> 
      <item ID="1021" isSelf="n"/>  
      <item ID="1023" isSelf="n"/>  
      <item ID="1003" isSelf="n"/>  
      <item ID="1020" isSelf="n"/>  
      <item ID="1022" isSelf="n"/> 
    </vrvscript>

    修改属性值:要把每个item元素的“isSelf”属性值修改为“y”

    // 获取XML
    Document document = XMLUtil.getDocument(xmlPath);
    Element root = document.getRootElement();
                
    Iterator<?> ruleNodes = root.elementIterator("item");
    while (ruleNodes.hasNext()) {
            Element ruleElement = (Element) ruleNodes.next();
            // 修改isSelf的属性值
           Attribute isSelfAttr = ruleElement.attribute("isSelf");
           isSelfAttr.setValue("n");                
    }
    writeXml(document, xmlPath.getPath());

        /**
         * 输出xml文件
         * 
         * @param document
         * @param filePath
         * @throws IOException
         */
        public static void writeXml(Document document, String filePath) throws IOException {
            File xmlFile = new File(filePath);
            XMLWriter writer = null;
            try {
                if (xmlFile.exists())
                    xmlFile.delete();
                writer = new XMLWriter(new FileOutputStream(xmlFile), OutputFormat.createPrettyPrint());
                writer.write(document);
                writer.close();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (writer != null)
                    writer.close();
            }
        }

    获取属性值:采用Element类的attributeValue方法

    String policyName = root.attributeValue("PolicyName");

    给XML元素增加属性

    Element ruleElement = root.addElement("item");
    ruleElement.addAttribute("ID", "1101");
    ruleElement.addAttribute("isSelf", "y");

    一些提供一个dom4j操作XML的工具类:

    package com.vrv.paw.utils;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.Iterator;
    import java.util.Map;
    
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    /**
     * 操作XML文件的工具类
     * 
     * @author glw
     */
    public class XMLUtil {
        /**
         * 得到XML文档
         * 
         * @param xmlFile
         *            文件名(路径)
         * @return XML文档对象
         * @throws DocumentException
         */
        public static Document getDocument(String xmlFile) {
            SAXReader reader = new SAXReader();
            reader.setEncoding("UTF-8");
            File file = new File(xmlFile);
            try {
                if (!file.exists()) {
                    return null;
                } else {
                    return reader.read(file);
                }
            } catch (DocumentException e) {
                throw new RuntimeException(e + "->指定文件【" + xmlFile + "】读取错误");
            }
        }
    
        /**
         * 得到XML文档(编码格式-gb2312)
         * 
         * @param xmlFile
         *            文件名(路径)
         * @return XML文档对象
         * @throws DocumentException
         */
        public static Document getDocument_gb2312(String xmlFile) {
            SAXReader reader = new SAXReader();
            reader.setEncoding("gb2312");
            File file = new File(xmlFile);
            try {
                if (!file.exists()) {
                    return null;
                } else {
                    return reader.read(file);
                }
            } catch (DocumentException e) {
                throw new RuntimeException(e + "->指定文件【" + xmlFile + "】读取错误");
            }
        }
    
        public static String getText(Element element) {
            try {
                return element.getTextTrim();
            } catch (Exception e) {
                throw new RuntimeException(e + "->指定【" + element.getName() + "】节点读取错误");
            }
    
        }
    
        /**
         * 增加xml文件节点
         * 
         * @param document
         *            xml文档
         * @param elementName
         *            要增加的元素名称
         * @param attributeNames
         *            要增加的元素属性
         * @param attributeValues
         *            要增加的元素属性值
         */
        public static Document addElementByName(Document document, String elementName, Map<String, String> attrs, String cdata) {
            try {
                Element root = document.getRootElement();
                Element subElement = root.addElement(elementName);
                for (Map.Entry<String, String> attr : attrs.entrySet()) {
                    subElement.addAttribute(attr.getKey(), attr.getValue());
                }
                subElement.addCDATA(cdata);
            } catch (Exception e) {
                throw new RuntimeException(e + "->指定的【" + elementName + "】节点增加出现错误");
            }
            return document;
        }
    
        /**
         * 删除xml文件节点
         */
        @SuppressWarnings("unchecked")
        public static Document deleteElementByName(Document document, String elementName) {
            Element root = document.getRootElement();
            Iterator<Object> iterator = root.elementIterator("file");
            while (iterator.hasNext()) {
                Element element = (Element) iterator.next();
                // 根据属性名获取属性值
                Attribute attribute = element.attribute("name");
                if (attribute.getValue().equals(elementName)) {
                    root.remove(element);
                    document.setRootElement(root);
                    break;
                }
            }
            return document;
        }
    
        /**
         * 输出xml文件
         * 
         * @param document
         * @param filePath
         * @throws IOException
         */
        public static void writeXml(Document document, String filePath) throws IOException {
            File xmlFile = new File(filePath);
            XMLWriter writer = null;
            try {
                if (xmlFile.exists())
                    xmlFile.delete();
                writer = new XMLWriter(new FileOutputStream(xmlFile), OutputFormat.createPrettyPrint());
                writer.write(document);
                writer.close();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (writer != null)
                    writer.close();
            }
        }
    
        /**
         * 创建Document及根节点
         * 
         * @param rootName
         * @param attributeName
         * @param attributeVaule
         * @return
         */
        public static Document createDocument(String rootName, String attributeName, String attributeVaule) {
            Document document = null;
            try {
                document = DocumentHelper.createDocument();
                Element root = document.addElement(rootName);
                root.addAttribute(attributeName, attributeVaule);
            } catch (Exception e) {
                throw new RuntimeException(e + "->创建的【" + rootName + "】根节点出现错误");
            }
            return document;
        }
    
        /**
         * 删除xml文件节点
         */
        @SuppressWarnings("unchecked")
        public static Document deleteElementAddressByName(Document document, String elementName) {
            Element root = document.getRootElement();
            Iterator<Object> iterator = root.elementIterator("address");
            while (iterator.hasNext()) {
                Element element = (Element) iterator.next();
                // 根据属性名获取属性值
                Attribute attribute = element.attribute("name");
                if (attribute.getValue().equals(elementName)) {
                    root.remove(element);
                    document.setRootElement(root);
                    break;
                }
            }
            return document;
        }
        
        /**
         *    删除属性等于某个值的元素
         *    @param document  XML文档
         *    @param xpath xpath路径表达式
         *    @param attrName 属性名
         *    @param attrValue 属性值
         *    @return      
         */
        @SuppressWarnings("unchecked")
        public static Document deleteElementByAttribute(Document document, String xpath, String attrName, String attrValue) {
            Iterator<Object> iterator = document.selectNodes(xpath).iterator();
            while (iterator.hasNext()) {
                Element element = (Element) iterator.next();
                Element parentElement = element.getParent();
                // 根据属性名获取属性值
                Attribute attribute = element.attribute(attrName);
                if (attribute.getValue().equals(attrValue)) {
                    parentElement.remove(element);
                }
            }
            return document;
        }
    }
  • 相关阅读:
    Asp.net 动态添加Meta标签
    【转】在SharePoint Server 2010中更改“我的网站”
    SPQuery DateTime 类型查询
    Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found
    How To Create SharePoint 2010 Site Collection In Its Own DB
    C# 文件打印
    面试题 java集合
    《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读
    《深入理解Java虚拟机》(五)JVM调优
    《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/liaojie970/p/5386138.html
Copyright © 2011-2022 走看看