`
zhouhaiyang88
  • 浏览: 4026 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

对XML进行增删改查

阅读更多

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<services>
    <service id="1001" name="a服务">
        <url>http://192.168.1.1:8080/PublicInfo/</url>
        <state/>       
    </service>
   
    <service id="1002" name="b服务">
        <url>http://192.168.1.2:8080/ETCMessageService</url>
        <state/>       
    </service>
</services>

 上面是本次要解析的XML文件。

package cn.microvideo.info.util;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import cn.microvideo.info.domain.ServiceMonitorInfo;
/**
 * 
 * @author zhouhy
 *
 */
public class XMLUtil {
	private XPath xpath = XPathFactory.newInstance().newXPath();
	private Logger log = Logger.getLogger(XMLUtil.class);
	/**
	 * 获取所有监控服务
	 * @param document
	 * @param value
	 * @return
	 */
	public List<ServiceMonitorInfo> getServices(Document document) {
		List<ServiceMonitorInfo> services = new ArrayList<ServiceMonitorInfo>();
		NodeList nodelist = document.getElementsByTagName("service");
		for (int i = 0; i < nodelist.getLength(); i++) {
			ServiceMonitorInfo service = new ServiceMonitorInfo();
			Element serviceNode = (Element) nodelist.item(i);
			String serviceName = serviceNode.getAttribute("name");
			String id = serviceNode.getAttribute("id");
			String url = null;
			String state = null;
			NodeList listnode = serviceNode.getChildNodes();
			for (int j = 0; j < listnode.getLength(); j++) {
				Node nd = listnode.item(j);
				if("url".equals(nd.getNodeName())){
					url = nd.getTextContent();
				}else if("state".equals(nd.getNodeName())){
					state = nd.getTextContent();
				}
			}
			service.setServiceName(serviceName);
			service.setUrl(url);
			service.setState(state);
			service.setId(id);
			services.add(service);
		}
		return services;
	}

	/**
	 * 根据ID查询服务
	 * @param document
	 * @param value
	 * @return
	 */
	public ServiceMonitorInfo findNodeByAttrValue(Document document, String code) {
		if(StringUtils.isBlank(code)){
			return null;
		}
		ServiceMonitorInfo service = new ServiceMonitorInfo();
		NodeList nodelist = document.getElementsByTagName("service");
		// 遍历
		for (int i = 0; i < nodelist.getLength(); i++) {
			Element serviceNode = (Element) nodelist.item(i);
			String val = serviceNode.getAttribute("id");
			if(code.equals(val)){
				String serviceName = serviceNode.getAttribute("name");
				String id = serviceNode.getAttribute("id");
				String url = null;
				String state = null;
				NodeList listnode = serviceNode.getChildNodes();
				for (int j = 0; j < listnode.getLength(); j++) {
					Node nd = listnode.item(j);
					if("url".equals(nd.getNodeName())){
						url = nd.getTextContent();
					}else if("state".equals(nd.getNodeName())){
						state = nd.getTextContent();
					}
				}
				service.setServiceName(serviceName);
				service.setUrl(url);
				service.setState(state);
				service.setId(id);
			}
		}
		return service;
	}

	/**
	 * 删除某个节点对象
	 * @param document
	 * @param id
	 * @throws TransformerException
	 * @throws XPathExpressionException 
	 * @throws UnsupportedEncodingException 
	 */
	public void deleteNodeById(Document document, ServiceMonitorInfo serviceInfo) throws TransformerException, XPathExpressionException, UnsupportedEncodingException {
		NodeList services = (NodeList) xpath.evaluate("//service[@id='"+serviceInfo.getId()+"']", document, XPathConstants.NODESET);
		Node node =  services.item(0);
		if(node != null){
			node.getParentNode().removeChild(node);
			TransformerFactory transformerFactory = TransformerFactory.newInstance();
			Transformer transformer = transformerFactory.newTransformer();
			URL url = Thread.currentThread().getContextClassLoader().getResource("cn/microvideo/info/config/servicemonitor.xml");
			String path =URLDecoder.decode(url.getPath(),"UTF-8");
			log.info("删除服务监控:"+serviceInfo.toString());
			transformer.transform(new DOMSource(document), new StreamResult( new File(path)));
		}
	}

	/**
	 * 更新某个节点
	 * @param document
	 * @param id
	 * @throws TransformerException
	 * @throws XPathExpressionException 
	 * @throws UnsupportedEncodingException 
	 */
	public void updateNodeById(Document document, ServiceMonitorInfo serviceInfo) throws TransformerException, XPathExpressionException, UnsupportedEncodingException {
		NodeList services = (NodeList) xpath.evaluate("//service[@id='"+serviceInfo.getId()+"']", document, XPathConstants.NODESET);
		Element node = (Element) services.item(0);
		if(node == null){
			addNode(document, serviceInfo);
		}
		NodeList nodelist = node.getChildNodes();
		for (int i = 0; i < nodelist.getLength(); i++) {
			Node n = nodelist.item(i);
			if (n.getNodeType() == Node.ELEMENT_NODE) {
				if (n.getNodeName().equals("url")) {
					n.setTextContent(serviceInfo.getUrl());
				} else if (n.getNodeName().equals("state")) {
					n.setTextContent(serviceInfo.getState());
				}
			}
		}

		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		URL url = Thread.currentThread().getContextClassLoader().getResource("cn/microvideo/info/config/servicemonitor.xml");
		String path =URLDecoder.decode(url.getPath(),"UTF-8");
		log.info("修改服务监控:"+serviceInfo.toString());
		transformer.transform(new DOMSource(document), new StreamResult( new File(path)));
	}

	/**
	 * 在指定的节点下方添加新得某个节点
	 * @param document
	 * @param id
	 * @throws TransformerException
	 * @throws XPathExpressionException 
	 * @throws UnsupportedEncodingException 
	 */
	public void addNode(Document document, ServiceMonitorInfo serviceInfo) throws TransformerException, XPathExpressionException, UnsupportedEncodingException {
		NodeList nodelist = (NodeList) xpath.evaluate("//service[@id='"+serviceInfo.getId()+"']", document, XPathConstants.NODESET);
		Element node = (Element) nodelist.item(0);
		if(node != null){
			updateNodeById(document, serviceInfo);
			return;
		}
		Element parentNode = document.getDocumentElement();
		Element nd = document.createElement("service");
		nd.setAttribute("name", serviceInfo.getServiceName());
		nd.setAttribute("id", serviceInfo.getId());
		Node url = document.createElement("url");
		url.appendChild(document.createTextNode(serviceInfo.getUrl()));
		Node state = document.createElement("state");
		state.appendChild(document.createTextNode(serviceInfo.getState()));
		nd.appendChild(url);
		nd.appendChild(state);
		parentNode.appendChild(nd);

		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		URL resource = Thread.currentThread().getContextClassLoader().getResource("cn/microvideo/info/config/servicemonitor.xml");
		String path =URLDecoder.decode(resource.getPath(),"UTF-8");
		log.info("增加服务监控:"+serviceInfo.toString());
		transformer.transform(new DOMSource(document), new StreamResult( new File(path)));
	}

	public Document getDocument() throws ParserConfigurationException, SAXException, IOException, TransformerException, XPathExpressionException {
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = builderFactory.newDocumentBuilder();
		InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("cn/microvideo/info/config/servicemonitor.xml");
		Document document = builder.parse(is);
		return document;
	}

	public static void main(String[] args) {
		XMLUtil xml = new XMLUtil();
		try {
			ServiceMonitorInfo serviceInfo = new ServiceMonitorInfo();
			serviceInfo.setId("1003");
			serviceInfo.setServiceName("中心数据库");
			serviceInfo.setState("正常");
			serviceInfo.setUrl("http://demo.cn");
			xml.addNode(xml.getDocument(), serviceInfo);
		} catch (ParserConfigurationException | SAXException | IOException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (XPathExpressionException e) {
			e.printStackTrace();
		}
	}
}

 

 

 

 

 

分享到:
评论

相关推荐

    对XML进行增删改查例子

    在这个“对XML进行增删改查例子”中,我们将探讨如何操作XML文档,包括添加新节点、删除已有节点、修改现有节点内容以及查询XML结构中的特定信息。 1. **XML的基本结构** XML文档由一系列元素组成,每个元素都有一...

    XML实例,针对XML进行增删改查等操作

    本实例将深入探讨如何对XML进行增删改查等基本操作。 首先,XML的基本结构包括元素(Element)、属性(Attribute)、文本内容(Text Content)、注释(Comment)、处理指令(Processing Instruction)等。在XML文...

    用dom4j对xml进行增删改查操作参考资料

    它提供了简单而直观的API,使得在Java中对XML进行增删改查变得容易。本文将详细介绍如何使用DOM4J进行XML的操作。 首先,我们需要理解XML的基本概念。XML(可扩展标记语言)是一种用于存储和传输数据的标准格式,它...

    Xml完全操作 XML增删改查

    XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文...

    C#对XML进行增删改查操作(可封装).pdf

    以上知识点展示了如何在C#中对XML文件进行基本的增删改查操作。这些操作可以进一步封装成方法或类,以方便重复使用并提高代码的可维护性。注意,由于原始文档内容是通过OCR扫描获得,可能包含一些识别错误,但根据上...

    c#中xml的增删改查操作

    在C#中进行XML文件的增删改查操作是一种常见的数据处理方式,尤其适用于轻量级数据存储或配置文件管理。下面将详细解析如何在C#中实现对XML文件的基本操作,包括创建、读取、更新和删除。 ### 创建XML文件 首先,...

    QT_DOM方式操作xml文件增删改查.rar

    QT_DOM方式操作xml文件增删改查 博文参考: https://txwtech.blog.csdn.net/article/details/126321336?spm=1001.2014.3001.5502

    使用XML进行增删改查技术编程Java源代码

    本教程将深入探讨如何使用XML进行增删改查的操作,并提供相应的Java源代码示例。 首先,我们需要理解XML的基本结构。XML文档由元素构成,元素通过标签来定义,如`&lt;element&gt;`...`&lt;/element&gt;`。属性是附加在元素上的...

    dom4j解析xml文件(增删改查)

    在提供的视频资源"17-dom4j解析xml文档(增删改查).avi"中,可能详细展示了这些操作的步骤和示例,观看该视频将进一步加深你对DOM4J操作XML的理解。记得实践是检验理论的最好方式,动手操作会让你更好地掌握这些知识...

    winform对xmL的增删改查

    本示例中,"winform对xmL的增删改查"实现了在WinForm应用程序中对XML文件的操作,包括添加数据、删除数据、修改数据以及查询数据。以下是关于这些操作的详细解释: 1. **XML文件的读取**: - 使用`System.Xml`命名...

    C# 高级技巧 操作 XML 增 删 改 查

    C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查

    .net 操作xml的增删改查。排序

    本知识点将深入探讨如何在.NET环境中对XML进行增删改查以及排序操作,帮助开发者更有效地处理XML数据。 一、XML的基本操作 1. 创建XML文档:可以使用System.Xml命名空间中的XmlWriter类来创建新的XML文档。例如: ...

    XML课程设计实现增删改查

    在本"XML课程设计实现增删改查"项目中,我们聚焦于如何使用XML进行数据存储,并通过Java编程实现对这些数据的CRUD(创建Create、读取Read、更新Update、删除Delete)操作。 XML的基本结构包括元素(Element)、属性...

    Qt操作XML文档(增删改查)

    本篇文章将深入探讨如何在Qt环境下进行XML文档的操作,包括增、删、改、查等常见功能。 首先,Qt中的`QDomDocument`类是用于解析和操作XML文档的核心类。它基于DOM(Document Object Model)模型,允许开发者以树形...

    JAVA 操作 XML 增删改查

    JAVA作为一款跨平台的编程语言,提供了丰富的API来操作XML,本篇将重点讲解如何使用JAVA进行XML的增删改查操作。 首先,从"JAVA 操作 XML 增删改查"这个标题来看,我们可以预知内容将涵盖XML文件的基本操作。这些...

    XML增删改查源码实现

    XML(eXtensible Markup Language)是一...总之,XML增删改查是XML编程中的基础操作,对于任何涉及XML处理的开发工作都是至关重要的。通过深入理解和实践提供的源码,你将能有效地管理XML文档,从而提升你的编程技能。

    一般页面(对某张表增删改查)

    在项目开发中,我们经常会对某张表进行增删改查。我们根据条件刷选表中的数据放到gridview中以列表形式展现,同时给gridview添加各种样式,比如一般必用的鼠标经过,鼠标离开颜色变化,行选中等颜色加深,同时给列表...

    XML增删改查 不用数据库,直接用xml代替,速度和效率很快

    .net资源 XML增删改查(不用数据库,直接用xml代替,速度和效率很快)XML增删改查(不用数据库,直接用xml代替,速度和效率很快)XML增删改查(不用数据库,直接用xml代替,速度和效率很快)XML增删改查(不用数据库...

Global site tag (gtag.js) - Google Analytics