`

对xml文件进行操作

    博客分类:
  • xml
 
阅读更多
package com.xml;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * 类名:XmlCreater
 * <p>
 * 类描述: 创建DOM并生成XML文件
 * <p>
 * 编写者 :luoc
 * <p>
 * 编写日期 :2005-6-22
 * <p>
 * 主要public成员变量:
 * <p>
 * 主要public方法:
 * <p>
 **/
public class XmlCreater {
	/* 全局变量 */
	private Logger logger = Logger.getLogger(getClass().getName());
	private Document doc = null;// 新创建的DOM
	private String path = null;// 生成的XML文件绝对路径

	/**
	 * 构造函数说明:
	 * <p>
	 * 参数说明:@param path xml文件路径
	 * <p>
	 **/
	public XmlCreater(String path) {
		this.path = path;
		init();
	}

	/**
	 * 方法名称:init
	 * <p>
	 * 方法功能: 初始化函数
	 * <p>
	 * 参数说明:
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	private void init() {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder builder = factory.newDocumentBuilder();
			doc = builder.newDocument();// 新建DOM
		} catch (ParserConfigurationException e) {
			logger.error("Parse DOM builder error:" + e);
		}
	}

	/**
	 * 方法名称:createRootElement
	 * <p>
	 * 方法功能:创建根结点,并返回
	 * <p>
	 * 参数说明:@param rootTagName
	 * <p>
	 * 返回:Element
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public Element createRootElement(String rootTagName) {
		if (doc.getDocumentElement() == null) {
			logger.debug("create root element '" + rootTagName + "' success.");
			Element root = doc.createElement(rootTagName);
			doc.appendChild(root);
			return root;
		}
		logger.warn("this dom's root element is exist,create fail.");
		return doc.getDocumentElement();
	}

	/**
	 * 方法名称:createElement
	 * <p>
	 * 方法功能:在parent结点下增加子结点tagName
	 * <p>
	 * 参数说明:@param parent 参数说明:@param tagName
	 * <p>
	 * 返回:Element
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public Element createElement(Element parent, String tagName) {
		Document doc = parent.getOwnerDocument();
		Element child = doc.createElement(tagName);
		parent.appendChild(child);
		return child;
	}

	/**
	 * 方法名称:createElement
	 * <p>
	 * 方法功能:在parent结点下增加值为value的子结点tabName
	 * <p>
	 * 参数说明:@param parent 参数说明:@param tagName 参数说明:@param value
	 * <p>
	 * 返回:Element
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public Element createElement(Element parent, String tagName, String value) {
		Document doc = parent.getOwnerDocument();
		Element child = doc.createElement(tagName);
		XmlOper.setElementValue(child, value);
		parent.appendChild(child);
		return child;
	}

	/**
	 * 方法名称:createAttribute
	 * <p>
	 * 方法功能:在parent结点下增加属性
	 * <p>
	 * 参数说明:@param parent 参数说明:@param attrName 属性名 参数说明:@param attrValue 属性值
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public void createAttribute(Element parent, String attrName, String attrValue) {
		XmlOper.setElementAttr(parent, attrName, attrValue);
	}

	/**
	 * 方法名称:buildXmlFile
	 * <p>
	 * 方法功能:根据DOM生成XML文件
	 * <p>
	 * 参数说明:
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public void buildXmlFile() {
		TransformerFactory tfactory = TransformerFactory.newInstance();
		try {
			Transformer transformer = tfactory.newTransformer();
			DOMSource source = new DOMSource(doc);
			logger.debug("New DOMSource success.");
			StreamResult result = new StreamResult(new File(path));
			logger.debug("New StreamResult success.");
			transformer.setOutputProperty("encoding", "utf-8");
			transformer.transform(source, result);
			logger.debug("Build XML File '" + path + "' success.");
		} catch (TransformerConfigurationException e) {
			logger.error("Create Transformer error:" + e);
		} catch (TransformerException e) {
			logger.error("Transformer XML file error:" + e);
		}
	}

	/**
	 * @return 返回 doc。
	 */
	public Document getDoc() {
		return doc;
	}

	/**
	 * @param doc
	 *            要设置的 doc。
	 */
	public void setDoc(Document doc) {
		this.doc = doc;
	}

	/**
	 * @return 返回 path。
	 */
	public String getPath() {
		return path;
	}

	/**
	 * @param path
	 *            要设置的 path。
	 */
	public void setPath(String path) {
		this.path = path;
	}
}

 

package com.xml;

import java.util.ArrayList;

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;

/**
 * 类名:XmlOper
 * <p>
 * 类描述:对XML文件进行读写操作,均为静态函数
 * <p>
 * 编写者 :luoc
 * <p>
 * 编写日期 :2005-6-22
 * <p>
 * 主要public成员变量:
 * <p>
 * 主要public方法:
 * <p>
 **/
public class XmlOper {
	/* 全局变量 */
	static Logger logger = Logger.getLogger("XmlOper");

	/**
	 * 构造函数说明:
	 * <p>
	 * 参数说明:
	 * <p>
	 **/
	private XmlOper() {
	}

	/**
	 * 方法名称:getNodeList
	 * <p>
	 * 方法功能:获取父结点parent的所有子结点
	 * <p>
	 * 参数说明:@param parent 参数说明:@return
	 * <p>
	 * 返回:NodeList
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static NodeList getNodeList(Element parent) {
		return parent.getChildNodes();
	}

	/**
	 * 方法名称:getElementsByName
	 * <p>
	 * 方法功能:在父结点中查询指定名称的结点集
	 * <p>
	 * 参数说明:@param parent 参数说明:@param name 参数说明:@return
	 * <p>
	 * 返回:Element[]
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static Element[] getElementsByName(Element parent, String name) {
		ArrayList resList = new ArrayList();
		NodeList nl = getNodeList(parent);
		for (int i = 0; i < nl.getLength(); i++) {
			Node nd = nl.item(i);
			if (nd.getNodeName().equals(name)) {
				resList.add(nd);
			}
		}
		Element[] res = new Element[resList.size()];
		for (int i = 0; i < resList.size(); i++) {
			res[0] = (Element) resList.get(i);
		}
		logger.debug(parent.getNodeName() + "'s children of " + name + "'s num:" + res.length);
		return res;
	}

	/**
	 * 方法名称:getElementName
	 * <p>
	 * 方法功能:获取指定Element的名称
	 * <p>
	 * 参数说明:@param element 参数说明:@return
	 * <p>
	 * 返回:String
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static String getElementName(Element element) {
		return element.getNodeName();
	}

	/**
	 * 方法名称:getElementValue
	 * <p>
	 * 方法功能:获取指定Element的值
	 * <p>
	 * 参数说明:@param element 参数说明:@return
	 * <p>
	 * 返回:String
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static String getElementValue(Element element) {
		NodeList nl = element.getChildNodes();
		for (int i = 0; i < nl.getLength(); i++) {
			if (nl.item(i).getNodeType() == Node.TEXT_NODE) {// 是一个Text Node
				logger.debug(element.getNodeName() + " has a Text Node.");
				return element.getFirstChild().getNodeValue();
			}
		}
		logger.error(element.getNodeName() + " hasn't a Text Node.");
		return null;
	}

	/**
	 * 方法名称:getElementAttr
	 * <p>
	 * 方法功能:获取指定Element的属性attr的值
	 * <p>
	 * 参数说明:@param element 参数说明:@param attr 参数说明:@return
	 * <p>
	 * 返回:String
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static String getElementAttr(Element element, String attr) {
		return element.getAttribute(attr);
	}

	/**
	 * 方法名称:setElementValue
	 * <p>
	 * 方法功能:设置指定Element的值
	 * <p>
	 * 参数说明:@param element 参数说明:@param val
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static void setElementValue(Element element, String val) {
		Node node = element.getOwnerDocument().createTextNode(val);
		NodeList nl = element.getChildNodes();
		for (int i = 0; i < nl.getLength(); i++) {
			Node nd = nl.item(i);
			if (nd.getNodeType() == Node.TEXT_NODE)// 是一个Text Node
			{
				nd.setNodeValue(val);
				logger.debug("modify " + element.getNodeName() + "'s node value succe.");
				return;
			}
		}
		logger.debug("new " + element.getNodeName() + "'s node value succe.");
		element.appendChild(node);
	}

	/**
	 * 方法名称:setElementAttr
	 * <p>
	 * 方法功能:设置结点Element的属性
	 * <p>
	 * 参数说明:@param element 参数说明:@param attr 参数说明:@param attrVal
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static void setElementAttr(Element element, String attr, String attrVal) {
		element.setAttribute(attr, attrVal);
	}

	/**
	 * 方法名称:addElement
	 * <p>
	 * 方法功能:在parent下增加结点child
	 * <p>
	 * 参数说明:@param parent 参数说明:@param child
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static void addElement(Element parent, Element child) {
		parent.appendChild(child);
	}

	/**
	 * 方法名称:addElement
	 * <p>
	 * 方法功能:在parent下增加字符串tagName生成的结点
	 * <p>
	 * 参数说明:@param parent 参数说明:@param tagName
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static void addElement(Element parent, String tagName) {
		Document doc = parent.getOwnerDocument();
		Element child = doc.createElement(tagName);
		parent.appendChild(child);
	}

	/**
	 * 方法名称:addElement
	 * <p>
	 * 方法功能:在parent下增加tagName的Text结点,且值为text
	 * <p>
	 * 参数说明:@param parent 参数说明:@param tagName 参数说明:@param text
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static void addElement(Element parent, String tagName, String text) {
		Document doc = parent.getOwnerDocument();
		Element child = doc.createElement(tagName);
		setElementValue(child, text);
		parent.appendChild(child);
	}

	/**
	 * 方法名称:removeElement
	 * <p>
	 * 方法功能:将父结点parent下的名称为tagName的结点移除
	 * <p>
	 * 参数说明:@param parent 参数说明:@param tagName
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	public static void removeElement(Element parent, String tagName) {
		logger.debug("remove " + parent.getNodeName() + "'s children by tagName " + tagName + " begin...");
		NodeList nl = parent.getChildNodes();
		for (int i = 0; i < nl.getLength(); i++) {
			Node nd = nl.item(i);
			if (nd.getNodeName().equals(tagName)) {
				parent.removeChild(nd);
				logger.debug("remove child '" + nd + "' success.");
			}
		}
		logger.debug("remove " + parent.getNodeName() + "'s children by tagName " + tagName + " end.");
	}
}

 

package com.xml;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

/**
 * 类名:XmlBuilder
 * <p>
 * 类描述:根据传入的XML文件生成Document和root结点
 * <p>
 * 编写者 :luoc
 * <p>
 * 编写日期 :2005-6-22
 * <p>
 * 主要public成员变量:
 * <p>
 * 主要public方法:
 * <p>
 **/
public class XmlBuilder {
	/* 全局变量 */
	private String path = null;// xml文件路径
	private Document doc = null;// xml文件对应的document
	private Element root = null;// xml文件的根结点
	private Logger logger = Logger.getLogger(getClass().getName());

	public XmlBuilder(String path) {
		this.path = path;
		init();
	}

	/**
	 * 方法名称:init
	 * <p>
	 * 方法功能:初始化函数
	 * <p>
	 * 参数说明:
	 * <p>
	 **/
	public void init() {
		buildDocument();
		buildRoot();
	}

	/**
	 * 方法名称:buildDocument
	 * <p>
	 * 方法功能:将XML文件生成Document
	 * <p>
	 * 参数说明:
	 * <p>
	 * 返回:void
	 * <p>
	 **/
	private void buildDocument() {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder builder = factory.newDocumentBuilder();
			logger.debug("Construct document builder success.");
			doc = builder.parse(new File(path));
			logger.debug("Build xml document success.");
		} catch (ParserConfigurationException e) {
			logger.error("Construct document builder error:" + e);
		} catch (SAXException e) {
			logger.error("Parse xml file error:" + e);
		} catch (IOException e) {
			logger.error("Read xml file error:" + e);
		}
	}

	/**
	 * 方法名称:buildRoot
	 * <p>
	 * 方法功能:生成XML的根结点
	 * <p>
	 * 参数说明:
	 * <p>
	 * 返回:void
	 * <p>
	 * 作者:luoc 日期:2005-6-22
	 **/
	private void buildRoot() {
		root = doc.getDocumentElement();
	}

	/**
	 * @return 返回 doc。
	 */
	public Document getDoc() {
		return doc;
	}

	/**
	 * @param doc
	 *            要设置的 doc。
	 */
	public void setDoc(Document doc) {
		this.doc = doc;
	}

	/**
	 * @return 返回 path。
	 */
	public String getPath() {
		return path;
	}

	/**
	 * @param path
	 *            要设置的 path。
	 */
	public void setPath(String path) {
		this.path = path;
	}

	/**
	 * @return 返回 root。
	 */
	public Element getRoot() {
		return root;
	}

	/**
	 * @param root
	 *            要设置的 root。
	 */
	public void setRoot(Element root) {
		this.root = root;
	}
}

 

分享到:
评论

相关推荐

    vb.net对xml文件进行操作

    本文详细介绍了如何使用VB.NET对XML文件进行基本的操作,包括创建、插入、修改和删除。这些基础操作是进行复杂XML处理任务的前提。掌握这些技巧后,开发者可以在各种应用场合灵活地使用XML数据,提高程序的功能性和...

    C#对XML文件进行操作(增删改查)

    C#作为.NET框架的主要编程语言,提供了丰富的API支持XML的处理,使得开发者能够轻松地对XML文件进行增、删、改、查等操作。下面我们将深入探讨这些操作的具体实现。 首先,让我们了解C#如何创建和读取XML文件。在C#...

    XMLOperator对xml文件进行操作的类

    1. **读取XML文件**:`LoadXML`方法,该方法可以用于加载XML文件内容到内存中,以便后续进行解析和操作。 2. **写入XML文件**:`SaveXML`方法,用于将XML文档对象保存到指定的文件路径,更新或创建新的XML文件。 3...

    C#对xml文件的简单操作

    在这个简单的课程资源管理系统中,我们将探讨如何利用C#对XML文件进行基本的操作,包括读取、写入、修改和删除XML数据。 首先,我们需要引入System.Xml命名空间,它是C#处理XML的基础。在C#代码中,可以使用以下...

    C#.Net对XML文件的操作类

    本文将深入探讨C#.Net中对XML文件进行操作的相关知识点。 一、XML基础 XML(Extensible Markup Language)是一种可扩展标记语言,用于存储和传输结构化数据。它具有自描述性,结构清晰,易于机器和人阅读。在C#.Net...

    xml文件操作详解crud操作

    XML(eXtensible Markup Language)是一种用于标记数据...通过编程接口,我们可以实现对XML文件的高效处理,满足各种业务需求。在实际应用中,还要注意XML的验证、命名空间、编码问题等,以确保数据的准确性和一致性。

    VS之XML文件操作

    在Visual Studio(VS)中,XML文件操作是一个重要的开发任务,尤其对于处理数据存储、配置文件、序列化或数据交换等场景。XML(eXtensible Markup Language)是一种标记语言,它提供了结构化的数据表示方式,易于...

    c#中对XML文件进行读写操作

    总结,C#提供了多种方式对XML文件进行读写操作,如使用`XmlDocument`和`XDocument`。选择哪种方式取决于具体需求,如文件大小、性能要求和代码可读性等因素。理解并熟练掌握这些方法,将有助于你在实际项目中高效地...

    操作xml文件_保存xml文件_操作XML_

    修改XML文件通常需要先解析XML,然后对解析得到的DOM树进行操作,最后再将修改后的DOM树写回文件。例如,我们可以添加新的元素或修改已有元素的属性值: ```java DocumentBuilderFactory factory = ...

    js 操作xml 文件 读取xml文件

    js 操作xml 文件 读取xml文件 js 操作xml 文件 读取xml文件

    动态生成Rss文件 Xml操作 Xml文件的修改

    动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件...

    远程XML文件编辑示例

    在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,其特点...通过学习和理解这个示例,开发者可以提升在远程XML文件操作方面的技能,这对于处理分布式系统中的数据交互具有重要意义。

    xml.zip_delphi xml文件_xml_xml delphi

    通过以上步骤,你可以全面地在Delphi中对XML文件进行操作。无论是在配置文件、数据交换、存储结构化数据等方面,XML都是一个强大的工具。在实际开发中,根据项目需求选择合适的XML处理方法,可以显著提高程序的灵活...

    c#文件处理之操作XML文件源码.rar

    本压缩包中的源码着重展示了如何在C#环境中对XML文件进行操作。下面将详细阐述相关知识点。 1. **XML基础** - XML是一种标记语言,它的主要目的是为了传输和存储数据,而不是显示数据。 - XML文档由元素(Element...

    C# LinqXML使用LINQ技术对XML文件进行读取

    以上就是C#的LinqXML技术对XML文件进行读取和操作的基本步骤。通过这些方法,你可以轻松地对XML数据进行查询、筛选、转换、添加、修改和删除等操作。在实际项目中,根据具体需求,还可以结合其他LINQ方法和表达式...

    系统文件管理和对XML文件操作管理

    在IT行业中,文件管理和XML文件操作是至关重要的技能,尤其在使用C#进行Windows桌面应用开发时。本文将深入探讨如何使用C#进行系统文件管理和XML文件操作,并以"WindowsFormsApplication1"为例来说明实际的开发过程...

    自己写的java对xml文件操作的类

    此外,考虑到性能,你可能考虑过使用SAX或StAX进行更高效的XML处理,特别是对于大型XML文件。 总的来说,你的类提供了一个方便的接口,使得在Java应用程序中操作XML文件变得更加简单。这种封装对于处理XML数据的...

    账号管理,对XML文件的操作处理

    对XML文件进行基本操作主要包括以下几类: 1. **读取XML文件**:使用编程语言中的XML解析库,如Python的ElementTree或Java的DOM解析器,可以解析XML文件并获取账号信息。解析后,可以遍历元素树,找到特定账号的...

    pb下读写xml文件的例子.rar_pb_pb 读取xml_pb 读取xml文件_pb9 xml_pb下读写xml文件的例子

    本示例主要探讨如何在PowerBuilder 9(PB9)中进行XML文件的读取和写入操作。 首先,我们需要了解PowerBuilder中的XML支持。PB9引入了对XML的支持,包括XMLDocument对象和DOM解析器,使得开发者能够方便地与XML数据...

    c++操作xml文件

    6. **保存修改**:如果对XML进行了修改,通过CXml对象的`saveFile`方法将更新后的DOM树写回XML文件。 以上就是关于“c++操作xml文件”的基础知识,这些概念和方法是处理XML文档时常见的工具。在实际开发中,根据...

Global site tag (gtag.js) - Google Analytics