java xmlutil类_Java操作XML工具类XmlUtil详解

本文详细介绍了Java中用于XML操作的工具类XmlUtil,包括生成XML文件、新增XML节点、读取XML内容的方法,并提供了具体的代码示例。通过这些方法,开发者可以方便地对XML文档进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实例为大家分享了Java操作XML工具类的具体代码,供大家参考,具体内容如下

一、代码

public class XmlUtil {

/**

* 将XML文件输出到指定的路径

*

* @param doc

* @param fileName

* @throws Exception

*/

public static void outputXml(Document doc, String fileName)

throws Exception {

TransformerFactory tf = TransformerFactory.newInstance();

Transformer transformer = tf.newTransformer();

DOMSource source = new DOMSource(doc);

transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));

StreamResult result = new StreamResult(pw);

transformer.transform(source, result);

System.out.println("生成XML文件成功!");

}

/**

* 生成XML

*

* @param ip

* @return

*/

public static Document generateXml(String ip) {

Document doc = null;

Element root = null;

try {

DocumentBuilderFactory factory = DocumentBuilderFactory

.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

doc = builder.newDocument();

root = doc.createElement("errorDevices");

doc.appendChild(root);

} catch (Exception e) {

e.printStackTrace();

return null;// 如果出现异常,则不再往下执行

}

Element element;

element = doc.createElement("errorDevice");

element.setAttribute("ip", ip);

element.setAttribute("date",

StringUtil.formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"));

element.setAttribute("status", "1");

root.appendChild(element);

return doc;

}

/**

* 新增Xml节点

*

* @param ip

* @param fileName

* @return

* @throws FileNotFoundException

* @throws TransformerException

*/

public static void toWrite(String filename, String ip)

throws FileNotFoundException, TransformerException {

String date = StringUtil.formatDate(new Date(), "yyyy-MM-dd hh:mm:ss");

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = null;

Document doc = null;

try {

builder = factory.newDocumentBuilder();

doc = builder.parse(new File(filename));

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

NodeList links = doc.getElementsByTagName("errorDevice");

if (links.getLength() > 0) {

for (int i = 0; i < links.getLength(); i++) {

Node nd = links.item(i);

Node catParent = nd.getParentNode();

Element ele = (Element) nd;

String url = ele.getAttribute("ip");

if (url.equals(ip)) {

// ele.setAttribute("date", date);

catParent.removeChild(nd);

}

}

}

Element element = doc.createElement("errorDevice");

element.setAttribute("ip", ip);

element.setAttribute("date",

StringUtil.formatDate(new Date(), "yyyy-MM-dd hh:mm:ss"));

element.setAttribute("status", "1");

doc.getDocumentElement().appendChild(element);

TransformerFactory tf = TransformerFactory.newInstance();

Transformer transformer = tf.newTransformer();

DOMSource source = new DOMSource(doc);

transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

PrintWriter pw = new PrintWriter(new FileOutputStream(filename));

StreamResult result = new StreamResult(pw);

transformer.transform(source, result);

System.out.println("新增XML节点成功!");

}

/**

* 读取XML

*

* @param filename

* @return

*/

public static List readXml(String filename){

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = null;

Document doc = null;

try {

builder = factory.newDocumentBuilder();

doc = builder.parse(new File(filename));

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

NodeList links = doc.getElementsByTagName("errorDevice");

List list = new ArrayList();

for(int i = 0; i< links.getLength() ; i ++){

Element node = (Element)links.item(i);

Map map = new HashMap();

map.put(node.getAttribute("ip"), node.getAttribute("date"));

list.add(map);

}

return list;

}

}

二、演示XML

三、最终效果图

5f3b279f6f74b1b7b9cc4f54d445880a.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析的XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值