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;
}
}
dom4j修改,获取,增加xml中某个元素的属性值的更多相关文章
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- javaScript获取文档中所有元素节点的个数
HTML+JS 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- Java分享笔记:使用entrySet方法获取Map集合中的元素
/*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这 ...
- 在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录,
前几天写一个js的时候遇到一个非常诡异的事情,这个问题是这样的,我要获取一个页面的DOM元素的val值,判断这个值是否比某个变量大,这个需求原先数字最大也就是10,现在要改了,可能会更多,这个时候我发 ...
- tween.js是一款可生成平滑动画效果的js动画库。tween.js允许你以平滑的方式修改元素的属性值。它可以通过设置生成各种类似CSS3的动画效果。
简要教程 tween.js是一款可生成平滑动画效果的js动画库.相关的动画库插件还有:snabbt.js 强大的jQuery动画库插件和Tweene-超级强大的jQuery动画代理插件. tween. ...
- JQuery中操作元素的属性_对象属性
我们主要是通过attr去获取元素的属性: 看body内容: <body> <p> 账号:<input type="text" id="una ...
- (转载)读取xml中的指定节点的值
/// <summary> /// 读取xml中的指定节点的值 /// </summary> private st ...
- 读取xml中的指定节点的值
/// <summary> /// 读取xml中的指定节点的值 /// </summary> private string ReadXmlNode(string filenam ...
- CSS3中transform几个属性值的注意点
transform(变形)是CSS3中的元素的属性,transform的属性值主要包括旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix 基本用法可以参考文 ...
随机推荐
- win8安装新字体
http://jingyan.baidu.com/article/e3c78d640a7ab33c4c85f52d.html
- c#中获取服务器IP,客户端IP以及其它
客户端ip:Request.ServerVariables.Get("Remote_Addr").ToString();客户端主机名:Request.ServerVariables ...
- 《剑指Offer》- 面试题3
<剑指Offer——名企面试官精讲典型编程题> 面试题3: 二维数组元素从左到右.从上到下递增,输入一个二维数组和一个整数, 查找该整数. 自己的思路:有序条件下进行查找,当然最简单 ...
- 使用shell脚本获取虚拟机中cpu使用率(读/proc/statc)
#!/bin/bash interval= cpu_num=`-] -c` start_idle=() start_total=() cpu_rate=() cpu_rate_file=./`host ...
- Chp18: Hard
18.1 Write a function that adds two numbers. You should not use + or any arithmetic operators. Solut ...
- SPOJ 3693 Maximum Sum(水题,记录区间第一大和第二大数)
#include <iostream> #include <stdio.h> #include <algorithm> #define lson rt<< ...
- **PHP随机数算法
<?php $tmp = range(1,30);print_r(array_rand($tmp,10));?> 输出: Array( [0] => 6 [1] => 8 [2 ...
- 将DJANGO管理界面的filter_horizontal移到前面来复用
参考URL: http://www.hoboes.com/Mimsy/hacks/replicating-djangos-admin/reusing-djangos-filter_horizontal ...
- Dear Project Manager, I Hate You
项目经理,我恨你,而且我知道你也恨我.我真的不理解,你究竟是做什么的. 你是一个多么独特的角色呀,几乎每个公司都要雇用你这样的人.可在不管大大小小的项目中,你与其说是帮忙,不如说是添乱.我坚信,大部分 ...
- hdu 1063 Exponentiation
求实数的幂,这个用C++写的话有点长,但是用Java写就非常方便了…… ); System.out.println(an); } }}