`

java W3C DOM解析XML

阅读更多
package com.netunit.workbench.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
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.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * 对存储网元信息的XML进行操作
 * 
 * @author 何明
 * 
 */

public class HandleXML {

	private Element theNetunit = null;

	private Element theProperties = null;

	private Element root = null;

	public HandleXML() {

	}

	/**
	 * 增加网元
	 * 
	 * @param ip
	 * @param geteway
	 * @param subnet
	 * @param describe
	 * @return
	 */
	public int toWrite(String ip, String geteway, String subnet, String describe) {

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

		try {

			factory.setIgnoringElementContentWhitespace(true);

			DocumentBuilder db = factory.newDocumentBuilder();

			File file = new File(
					"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml");

			Document xmldoc = db.parse(file);

			root = xmldoc.getDocumentElement();

			// 新建网元

//			theNetunit = xmldoc.createElement("root");

			theNetunit = xmldoc.createElement("info");

			theNetunit.setAttribute("id", ip);

//			theNetunit.appendChild(theProperties);

			theProperties = xmldoc.createElement("IP");

			theProperties.setTextContent(ip);

			theNetunit.appendChild(theProperties);

			theProperties = xmldoc.createElement("gateway");

			theProperties.setTextContent(geteway);

			theNetunit.appendChild(theProperties);

			theProperties = xmldoc.createElement("subnet");

			theProperties.setTextContent(subnet);

			theNetunit.appendChild(theProperties);

			theProperties = xmldoc.createElement("describe");

			theProperties.setTextContent(describe);

			theNetunit.appendChild(theProperties);

			root.appendChild(theNetunit);

			output(theNetunit);

			saveXml(
					"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml",
					xmldoc);

			return 1;

		} catch (Exception e) {

			e.printStackTrace();

		}

		return 0;

	}

	/**
	 * 根据IP查找其下面节点的值
	 * 
	 * @param ip
	 * @return
	 */
	public NetunitInfo getOtherMessage(String ip) {

		NetunitInfo info = new NetunitInfo();

		try {

			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();

			File file = new File(
					"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml");

			Document doc = builder.parse(file);

			NodeList le = doc.getDocumentElement().getElementsByTagName("IP");

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

				Node no = le.item(i);

				if (ip.equals(no.getFirstChild().getNodeValue())) {

					info.setIp(no.getFirstChild().getNodeValue());

					Node n = no.getNextSibling();

					info.setGateway(n.getNextSibling().getFirstChild()
							.getNodeValue());

					Node n1 = n.getNextSibling().getNextSibling();

					info.setSubnet(n1.getNextSibling().getFirstChild()
							.getNodeValue());

					Node n2 = n1.getNextSibling().getNextSibling();

					info.setDescribe(n2.getNextSibling().getFirstChild()
							.getNodeValue());

				}
			}

			return info;

		} catch (Exception e) {

			e.printStackTrace();

		}

		return null;
	}

	// 根据IP值修改其下面三个节点的值
	public int toUpdate(String ip, String gateway, String subnet,
			String describe) {

		try {

			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();

			File file = new File(
					"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml");

			Document doc = builder.parse(file);

			NodeList le = doc.getDocumentElement().getElementsByTagName("IP");

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

				Node no = le.item(i);

				if (ip.equals(no.getFirstChild().getNodeValue())) {

					Node n = no.getNextSibling();

					n.getNextSibling().getFirstChild().setNodeValue(gateway);

					Node n1 = n.getNextSibling().getNextSibling();

					n1.getNextSibling().getFirstChild().setNodeValue(subnet);

					Node n2 = n1.getNextSibling().getNextSibling();

					n2.getNextSibling().getFirstChild().setNodeValue(describe);

					saveXml(
							"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml",
							doc);

				}

			}

			return 1;

		} catch (Exception e) {

			e.printStackTrace();

		}

		return 0;

	}

	// 根据IP删除节点信息
	public int toDelete(String ip) {

		try {

			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();

			File file = new File(
					"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml");

			Document doc = builder.parse(file);
			
			NodeList le = doc.getElementsByTagName("info");
			
			for(int i = 0; i < le.getLength(); i++){
				
				Element e = (Element) le.item(i);
				
				if(ip.equals(e.getAttribute("id"))){
					
					e.getParentNode().removeChild(e);
					saveXml(
							"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml",
							doc);
				}
				
			}

		} catch (Exception e) {

			e.printStackTrace();

		}

		return 0;

	}

	/**
	 * 将添加的信息打印在控制台
	 * 
	 * @param node
	 */
	public static void output(Node node) {
		TransformerFactory transFactory = TransformerFactory.newInstance();
		try {
			Transformer transformer = transFactory.newTransformer();
			transformer.setOutputProperty("encoding", "gb2312");
			transformer.setOutputProperty("indent", "yes");

			DOMSource source = new DOMSource();
			source.setNode(node);
			StreamResult result = new StreamResult();
			result.setOutputStream(System.out);

			transformer.transform(source, result);
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 查找子节点
	 * 
	 * @param express
	 * @param source
	 * @return
	 */
	public static NodeList selectNodes(String express, Object source) {

		NodeList result = null;

		XPathFactory xpathFactory = XPathFactory.newInstance();

		XPath xpath = xpathFactory.newXPath();

		try {

			result = (NodeList) xpath.evaluate(express, source,
					XPathConstants.NODESET);

		} catch (XPathExpressionException e) {

			e.printStackTrace();

		}

		return result;
	}

	/**
	 * 得到节点值
	 * 
	 * @param key
	 * @return
	 */
	public static String[] getNodeValue(String key) {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();

			File file = new File(
					"E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml");

			Document doc = builder.parse(file);

			String[] str = new String[doc.getDocumentElement()
					.getElementsByTagName("IP").getLength()];

			NodeList le = doc.getDocumentElement().getElementsByTagName("IP");
			for (int i = 0; i < le.getLength(); i++) {
				Node no = le.item(i);
				str[i] = no.getTextContent();
			}

			return str;

		} catch (Exception e) {

			e.printStackTrace();

		}
		return null;

	}

	/**
	 * 输出到文本
	 * 
	 * @param fileName
	 * @param doc
	 */
	public static void saveXml(String fileName, Document doc) {
		TransformerFactory transFactory = TransformerFactory.newInstance();
		try {
			Transformer transformer = transFactory.newTransformer();
			transformer.setOutputProperty("indent", "yes");

			DOMSource source = new DOMSource();
			source.setNode(doc);
			StreamResult result = new StreamResult();
			result.setOutputStream(new FileOutputStream(fileName));

			transformer.transform(source, result);
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {

		HandleXML hand = new HandleXML();

		// 添加
		// hand.toWrite("192.168.0.2", "192.168.0.1", "255.255.255.255",
		// "iiiiiiiiiiiiiip");

		hand.toDelete("192.168.0.1");
		
		// 读
		try {
			// DocumentBuilderFactory factory = DocumentBuilderFactory
			// .newInstance();
			// DocumentBuilder builder = factory.newDocumentBuilder();
			//
			// File file = new File("Info.xml");
			// Document doc = builder.parse(file);
			// String[] str = new
			// String[doc.getDocumentElement().getElementsByTagName("IP").getLength()];
			//			
			// System.out.println(str.length);
			//			
			// NodeList le =
			// doc.getDocumentElement().getElementsByTagName("IP");
			// for(int i=0;i<le.getLength();i++){
			// Node no = le.item(i);
			// System.out.println(no.getTextContent());
			// str[i] = no.getTextContent();
			// }
			// System.out.println(str.length);
			//
			//		
			//

			// 根据IP的值读其下面的三个节点的值
			// DocumentBuilderFactory factory = DocumentBuilderFactory
			// .newInstance();
			// DocumentBuilder builder = factory.newDocumentBuilder();
			//		
			// File file = new
			// File("E:\\workspace\\com.netunit.workbench\\com.netunit.workbench\\com.netunit.workbench\\Info.xml");
			//			
			// Document doc = builder.parse(file);
			//			
			// NodeList le =
			// doc.getDocumentElement().getElementsByTagName("IP");
			//			
			// for(int i=0;i<le.getLength();i++){
			// Node no = le.item(i);
			// System.out.println(no.getFirstChild().getNodeValue());
			// if("192.168.5.6".equals(no.getFirstChild().getNodeValue())){
			//					
			// NetunitInfo info = new NetunitInfo();
			//					
			// info.setIp(no.getFirstChild().getNodeValue());
			//					
			// Node n = no.getNextSibling();
			//					
			// info.setGateway(n.getNextSibling().getFirstChild().getNodeValue());
			//					
			// Node n1 = n.getNextSibling().getNextSibling();
			//					
			// System.out.println(n1.getNextSibling().getFirstChild().getNodeValue());
			// info.setSubnet(n1.getNextSibling().getFirstChild().getNodeValue());
			//					
			// Node n2 = n1.getNextSibling().getNextSibling();
			//					
			// System.out.println(n2.getNextSibling().getFirstChild().getNodeValue());
			//					
			// info.setDescribe(n2.getNextSibling().getFirstChild().getNodeValue());
			//					
			// }
			// }

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

}


1
0
分享到:
评论

相关推荐

    java_dom解析xml xml java

    标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到这是一个适合新手入门的内容,并给出了一个简单的XML示例。该XML文档包含了一个`...

    java平台中使用DOM解析xml文件

    总的来说,理解并熟练掌握DOM解析XML是Java开发中的基础技能,无论是在简单的数据读取还是复杂的XML操作中,它都能提供强大的支持。同时,根据项目需求和性能考虑,可以选择JDOM等其他XML处理库作为替代方案。

    java dom 解析 xml 实例

    Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过遍历树形结构可以访问和操作 ...

    DOM_XML.rar_DOM_dom xml_dom xml java_dom解析xml_java解析xml

    在Java中,`org.w3c.dom`包提供了DOM解析XML的基础接口和类。以下是DOM解析XML的基本步骤: 1. 加载XML文档:首先,我们需要一个`DocumentBuilderFactory`实例来配置和创建`DocumentBuilder`,然后用`...

    java使用dom解析xml

    Java 使用 DOM 解析 XML 是一种常见的处理 XML 文档的方式,DOM 即 Document Object Model,它是一种 W3C 标准的 API,用于处理 XML 和 HTML 文档。在 Java 中,DOM 解析允许开发者将整个 XML 文件加载到内存中,...

    DOM解析xml文件实例讲解

    本篇文章将深入探讨DOM解析XML文件在Android中的应用实例。 首先,DOM解析的基本思想是将整个XML文件加载到内存中,形成一个树形结构,即DOM树。这样做的优点是解析后的数据可以方便地进行任意位置的查找和修改,但...

    java中用dom解析xml的经典入门级文档

    ### Java中使用DOM解析XML详解 #### 一、引言 在Java开发中,解析XML是一种常见的需求。XML(Extensible Markup Language,可扩展标记语言)作为一种数据存储和传输的标准格式,在不同系统间的数据交换中扮演着...

    Java中Dom方式解析XML

    首先,我们需要导入Java的`javax.xml.parsers`和`org.w3c.dom`包,它们提供了DOM解析XML所需的类和接口。 ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; ...

    java中dom解析xml

    总结起来,Java中的DOM解析XML是一种强大的技术,允许程序员以对象形式处理XML文档,通过构建的树形结构可以方便地进行读写操作。然而,对于大规模的XML文件,应考虑其他低内存占用的解析策略。在实际项目中,开发者...

    android Dom解析xml文件

    本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的基本概念 DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、...

    JAVA_dom解析xml

    Java DOM(Document Object Model)解析XML是一种...总的来说,DOM解析XML是Java中处理XML数据的基础技术,适用于小型或中型XML文档的读取和操作。理解并熟练掌握DOM解析,能够帮助开发者更高效地与XML数据进行交互。

    经典的DOM解析XML范例

    【DOM解析XML】 在Java中,解析XML文档有多种方式,其中DOM(Document Object Model)和SAX(Simple API for XML)是最常见的两种。DOM是一种基于树形结构的XML处理方式,它将整个XML文档加载到内存中,形成一个完整...

    Java使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    DOM(Document Object Model)是W3C推荐的一种处理XML文档的标准模型。它将整个XML文档加载到内存中,构建一个树形结构,允许开发者通过节点关系来访问和修改XML文档。优点是可以方便地遍历整个文档,但缺点是对内存...

    java DOM解析xml操作大全,增删改查

    在这个"java DOM解析xml操作大全,增删改查"的主题中,我们将深入探讨如何使用DOM解析XML,以及如何结合三层架构(表示层、业务逻辑层、数据访问层)来实现这些操作。 首先,DOM解析的核心是`javax.xml.parsers....

    Java DOM 生成XML

    在Java中,DOM API被包含在`javax.xml.parsers`和`org.w3c.dom`这两个包中。 DOM API的核心类包括`DocumentBuilderFactory`、`DocumentBuilder`和`Document`。首先,`DocumentBuilderFactory`用于创建`...

    dom解析XML,普通解析

    DOM解析XML是处理XML数据的一种常见方式,尤其在Java编程中广泛使用。下面我们将深入探讨DOM解析XML的相关知识点。 1. DOM解析原理: DOM解析器读取整个XML文件,将其转换为内存中的对象树,每个XML元素、属性、...

    java解析xml——dom

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

    xml解析 dom方式 例子和讲解

    1. **导入库**:使用DOM解析XML时,我们需要导入javax.xml.parsers和org.w3c.dom相关的库。例如: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; ...

Global site tag (gtag.js) - Google Analytics