• 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;
        }
    }
  • 相关阅读:
    vue中路由跳转传递参数
    父组件向子孙组件传递数据provide/inject
    微信、QQ等内置浏览器定位失败
    Java ArrayList类
    java 生成 [1, n] 之间的随机数
    Java 构造方法
    Java this关键字
    Java private关键字及作用
    Java 随笔
    Java 内存划分
  • 原文地址:https://www.cnblogs.com/liaojie970/p/5386138.html
Copyright © 2020-2023  润新知