<?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结构中的特定信息。 1. **XML的基本结构** XML文档由一系列元素组成,每个元素都有一...
本实例将深入探讨如何对XML进行增删改查等基本操作。 首先,XML的基本结构包括元素(Element)、属性(Attribute)、文本内容(Text Content)、注释(Comment)、处理指令(Processing Instruction)等。在XML文...
它提供了简单而直观的API,使得在Java中对XML进行增删改查变得容易。本文将详细介绍如何使用DOM4J进行XML的操作。 首先,我们需要理解XML的基本概念。XML(可扩展标记语言)是一种用于存储和传输数据的标准格式,它...
XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文...
以上知识点展示了如何在C#中对XML文件进行基本的增删改查操作。这些操作可以进一步封装成方法或类,以方便重复使用并提高代码的可维护性。注意,由于原始文档内容是通过OCR扫描获得,可能包含一些识别错误,但根据上...
在C#中进行XML文件的增删改查操作是一种常见的数据处理方式,尤其适用于轻量级数据存储或配置文件管理。下面将详细解析如何在C#中实现对XML文件的基本操作,包括创建、读取、更新和删除。 ### 创建XML文件 首先,...
QT_DOM方式操作xml文件增删改查 博文参考: https://txwtech.blog.csdn.net/article/details/126321336?spm=1001.2014.3001.5502
本教程将深入探讨如何使用XML进行增删改查的操作,并提供相应的Java源代码示例。 首先,我们需要理解XML的基本结构。XML文档由元素构成,元素通过标签来定义,如`<element>`...`</element>`。属性是附加在元素上的...
在提供的视频资源"17-dom4j解析xml文档(增删改查).avi"中,可能详细展示了这些操作的步骤和示例,观看该视频将进一步加深你对DOM4J操作XML的理解。记得实践是检验理论的最好方式,动手操作会让你更好地掌握这些知识...
本示例中,"winform对xmL的增删改查"实现了在WinForm应用程序中对XML文件的操作,包括添加数据、删除数据、修改数据以及查询数据。以下是关于这些操作的详细解释: 1. **XML文件的读取**: - 使用`System.Xml`命名...
C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查 C# 高级技巧 操作 XML 增 删 改 查
本知识点将深入探讨如何在.NET环境中对XML进行增删改查以及排序操作,帮助开发者更有效地处理XML数据。 一、XML的基本操作 1. 创建XML文档:可以使用System.Xml命名空间中的XmlWriter类来创建新的XML文档。例如: ...
在本"XML课程设计实现增删改查"项目中,我们聚焦于如何使用XML进行数据存储,并通过Java编程实现对这些数据的CRUD(创建Create、读取Read、更新Update、删除Delete)操作。 XML的基本结构包括元素(Element)、属性...
本篇文章将深入探讨如何在Qt环境下进行XML文档的操作,包括增、删、改、查等常见功能。 首先,Qt中的`QDomDocument`类是用于解析和操作XML文档的核心类。它基于DOM(Document Object Model)模型,允许开发者以树形...
JAVA作为一款跨平台的编程语言,提供了丰富的API来操作XML,本篇将重点讲解如何使用JAVA进行XML的增删改查操作。 首先,从"JAVA 操作 XML 增删改查"这个标题来看,我们可以预知内容将涵盖XML文件的基本操作。这些...
XML(eXtensible Markup Language)是一...总之,XML增删改查是XML编程中的基础操作,对于任何涉及XML处理的开发工作都是至关重要的。通过深入理解和实践提供的源码,你将能有效地管理XML文档,从而提升你的编程技能。
在项目开发中,我们经常会对某张表进行增删改查。我们根据条件刷选表中的数据放到gridview中以列表形式展现,同时给gridview添加各种样式,比如一般必用的鼠标经过,鼠标离开颜色变化,行选中等颜色加深,同时给列表...
.net资源 XML增删改查(不用数据库,直接用xml代替,速度和效率很快)XML增删改查(不用数据库,直接用xml代替,速度和效率很快)XML增删改查(不用数据库,直接用xml代替,速度和效率很快)XML增删改查(不用数据库...