⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlutil.java

📁 介绍xml加密和xml数字签名的方法的源代码
💻 JAVA
字号:
package test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;

/**
* Jdom解析XML
* 
* @FileName:XMLUtil.java
* @author Javer.Leo (QQ:84831612)
* @date 2006-8-16
*/
	public final class XMLUtil{
		/**
		 * 定义xml编码方式
		 */
		public static final String ENCODE_GBK = "GBK";
		public static final String ENCODE_UTF8 = "UTF-8";
		public static final String ENCODE_UTF16 = "UTF-16";
		public static final String ENCODE_GB2312 = "gb2312";
		public static final String ENCODE_ISO8859 = "ISO8859-1";

		private static Format format = Format.getPrettyFormat();

		static {
			format.setEncoding(ENCODE_UTF8);
		}

		/**
		 * Read and parse an xml document from the file at xml/sample.xml.
		 * This method corresponds to the code in Listing 7.
		 * @param filePath 要解析的xml文件路径
		 * @return the JDOM document parsed from the file.
		 * @throws IOException
		 */
		public static Document readDocument(String filePath) throws IOException {
			try {
				SAXBuilder builder = new SAXBuilder(false);
				Document anotherDocument = builder.build(new File(filePath));
				return anotherDocument;
			} catch(Exception e) {
				e.printStackTrace();
			throw new IOException(e.getMessage());
			}
		}

		/**
		 * Read and parse an xml document from the file at xml/sample.xml.
		 * This method corresponds to the code in Listing 7.
		 * @param filePath 要解析的xml文件路径
		 * @return the JDOM document parsed from the file.
		 * @throws IOException
		 */
		public static Document readDocument(InputStream input) throws IOException {
			try {
				SAXBuilder builder = new SAXBuilder(false);
				Document anotherDocument = builder.build(input);
				input.close();
				return anotherDocument;
			} catch(Exception e) {
				throw new IOException(e.getMessage());
			}
		}

		/**
		 * 读取xml文件
		 * @param srcFile 目标文件
		 * @return DOM对象
		 * @throws IOException
		 */
		public static Document readDocument(File srcFile) throws IOException {
			try {
				SAXBuilder builder = new SAXBuilder();
				Document anotherDocument = builder.build(srcFile);
				return anotherDocument;
			} catch(Exception e) {
				throw new IOException(e.getMessage());
			}
		}

		/**
		 * 向指定的文档模型添加指定元素标识名称的元素
		 * @param document 要添加元素的文档模型
		 * @param elementName 要添加的元素标识名称
		 * @param parentElementPath 父元素路径
		 * @return
		 */
		public static void addElement(Object document,String parentElementPath,String elementName){
			try{
				Element parentElement;
				parentElement = (Element)XPath.selectSingleNode(document,parentElementPath);
				Element newElement = new Element(elementName);
				parentElement.addContent(newElement);
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}

		/**
		 * 向指定的文档模型添加已创建元素
		 * @param document 要添加元素的文档模型
		 * @param newElement 要添加的新元素
		 * @param parentElementPath 父元素路径
		 * @return
		 */
		public static void addElement(Object document,String parentElementPath,Element newElement){
			try{
				Element parentElement;
				parentElement = (Element)XPath.selectSingleNode(document,parentElementPath);
				parentElement.addContent(newElement);
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		} 

		/**
		 * 获取指定子元素路径的子元素列表
		 * @param document the JDOM document built from Listing 2
		 * @param visitedNodeName 指定要访问的子节点元素名称
		 * @return 返回指定元素路径的子元素列表
		 */
		public static List getChildrenElement(Object document,String visitedNodeName) {
			List visitElements = null;
			try {
				visitElements = XPath.selectNodes(document,visitedNodeName);
			} catch (Exception e) {
				e.printStackTrace();
			}
			return visitElements;
		}

		/**
		 * 获取指定子元素路径名称和属性名称及值的元素
		 * @param document the JDOM document built from Listing 2
		 * @param visitedNodeName 指定要访问的子节点元素名称
		 * @param attributeName 属性名称
		 * @param attributeValue 属性值
		 * @return 返回指定的元素
		 */
		public static Element getChildElement(Object document,String visitedNodeName,String attributeName,String attributeValue) {
			Element visitElement = null;
			try {
				visitElement = (Element)XPath.selectSingleNode(document,visitedNodeName+"[@"+attributeName+"='"+attributeValue+"']");
			} catch (Exception e) {
				e.printStackTrace();
			}
			return visitElement;
		}

		/**
		 * 获取指定子元素路径名称和属性名称及值的元素
		 * @param document the JDOM document built from Listing 2
		 * @param visitedNodeName 指定要访问的子节点元素名称
		 * @return 返回指定的元素
		 */
		public static Element getChildElement(Object document,String visitedNodeName) {
			Element visitElement = null;
			try {
				visitElement = (Element)XPath.selectSingleNode(document,visitedNodeName);
			} catch (Exception e) {
				e.printStackTrace();
			}
			return visitElement;
		}

		/**
		 * 删除指定元素节点路径的元素
		 *@param removeNodeName 要删除的元素路径
		 * @param document xml文件对应的文档模型
		 */
		public static boolean removeChildElement(Object document,String removeNodeName) {
			Element visitElement = null;
			boolean isRemoved = false;
			try {
				visitElement = (Element)XPath.selectSingleNode(document,removeNodeName);
				if(visitElement != null)
					isRemoved = visitElement.getParentElement().removeContent(visitElement);
			} catch (Exception e) {
				e.printStackTrace();
			}
			return isRemoved;
		}

		/**
		 * 删除指定属性的元素
		 * @param document xml文件对应的文档模型
		 * @param removeNodeName 要删除的节点元素路径
		 * @param attributeName 属性名称
		 * @param attributeValue 属性值
		 * @return
		 */
		public static boolean removeChildElement(Object document,String removeNodeName ,String attributeName,String attributeValue) {
			List removeElements = null;
			Element visitElement = null;
			boolean isRemoved = false;
			try {
				removeElements = XPath.selectNodes(document,removeNodeName+"[@"+attributeName+"='"+attributeValue+"']");
				if(removeElements != null){
					for (int i = 0; i < removeElements.size(); i++) { 
						visitElement = (Element) removeElements.get(i);
						isRemoved = visitElement.getParentElement().removeContent(visitElement);
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return isRemoved;
		}

		/**
		 * 将xml文档模型输出到标准输出设备(屏幕)
		 * @param document 指定的xml文档模型
		 */
		public static void outputDocument(Document document) {
			format.setIndent(" ");
			format.setExpandEmptyElements(false);
			try {
				XMLOutputter outputter = new XMLOutputter(format);
				outputter.output(document, System.out);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		/**
		 * 将xml文档模型输出到标准输出设备(流)
		 * @param document 指定的xml文档模型
		 */
		public static void outputDocument(Document document,OutputStream output) {
			format.setIndent(" ");
			format.setExpandEmptyElements(false);
			try {
				XMLOutputter outputter = new XMLOutputter(format);
				outputter.output(document, output);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		/**
		 * 将xml文档模型输出到指定文件
		 * @param document 指定的xml文档模型
		 * @param outputFilePath 输出文件路径
		 */
		public static void outputDocumentToFile(Document document,String outputFilePath) {
			outputDocumentToFile(document,outputFilePath,ENCODE_GB2312);
		}

		/**
		 * 将xml文档模型输出到指定文件
		 * @param document 指定的xml文档模型
		 * @param outputFilePath 输出文件路径
		 * @param encodingMode 编码方式
		 */
		public static void outputDocumentToFile(Document document,String outputFilePath,String encodingMode) {
			format.setEncoding(encodingMode);
			format.setIndent(" ");
			format.setExpandEmptyElements(false);
			FileWriter writer = null;

			try {
				XMLOutputter outputter = new XMLOutputter(format);
				writer = new FileWriter(outputFilePath);
				outputter.output(document, writer);
				writer.close();

			}catch(Exception ep) {
				ep.printStackTrace();
			}
			finally{
				try {
					if(writer != null)
						writer.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}

		/**
		 * 将将xml文档模型输出到指定字符串
		 * @param document 指定的xml文档模型
		 * @return 返回document的内容
		 */
		public static String outputDocumentString(Document document){

			return outputDocumentString(document,ENCODE_GBK);
		}

		/**
		 * 将将xml文档模型输出到指定字符串
		 * @param document 指定的xml文档模型
		 * @param encodingMode 编码格式
		 * @return 返回document的内容
		 */
		public static String outputDocumentString(Document document,String encodingMode){
			format.setEncoding(encodingMode);
			format.setIndent(" ");
			format.setExpandEmptyElements(false);
			XMLOutputter outputter = new XMLOutputter(format);
			return outputter.outputString(document);
		}

		/**
		 * This method takes a JDOM document in memory, an xsl file at xml/car.xsl,
		 * and outputs the results to stdout.
		 * This method corresponds to Listing 9.
		 * @param myDocument the JDOM document built from Listing 2.
		 */
		// public static void executeXSL(Document myDocument) {
		// try {
		// TransformerFactory tFactory = TransformerFactory.newInstance();
		// // Make the input sources for the XML and XSLT documents
		// org.jdom.output.DOMOutputter outputter = new org.jdom.output.DOMOutputter();
		// org.w3c.dom.Document domDocument = outputter.output(myDocument);
		// javax.xml.transform.Source xmlSource = new javax.xml.transform.dom.DOMSource(domDocument);
		// StreamSource xsltSource = new StreamSource(new FileInputStream("car.xsl"));
		// //Make the output result for the finished document
		// /*
		// * Note that here we are just going to output the results to the
		// * System.out, since we don't actually have a HTTPResponse object
		// * in this example
		// */
		// //StreamResult xmlResult = new StreamResult(response.getOutputStream());
		// StreamResult xmlResult = new StreamResult(System.out);
		// //Get a XSLT transformer
		// Transformer transformer = tFactory.newTransformer(xsltSource);
		// //do the transform
		// transformer.transform(xmlSource, xmlResult);
		// } catch(FileNotFoundException e) {
		// e.printStackTrace();
		// } catch(TransformerConfigurationException e) {
		// e.printStackTrace();
		// } catch(TransformerException e) {
		// e.printStackTrace();
		// } catch(org.jdom.JDOMException e) {
		// e.printStackTrace();
		// }
		// }

		/**
		 * 修改指定节点元素的属性
		 * @param document
		 * @param nodePath
		 * @param name
		 * @param value
		 */
		public static void setElementAttributeValue(Object document,String nodePath,String name,String value){
			try {
				((Element)XPath.selectSingleNode(document,nodePath)).setAttribute(name,value);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		/**
		 * 修改指定节点元素的属性
		 * @param document
		 * @param nodePath
		 * @param attrName
		 * @param attrValue
		 * @param name
		 * @param value
		 */
		public static void setElementAttributeValue(Object document,String nodePath,String attrName,String attrValue,String name,String value){
			nodePath +="[@" + attrName + "='" + attrValue + "']"; 
			setElementAttributeValue(document,nodePath,name,value);
		}
		/**
		 * 修改指定节点元素的内容
		 * @param document
		 * @param nodePath
		 * @param text
		 */
		public static void setElementText(Object document,String nodePath,String text){
			try {
				((Element)XPath.selectSingleNode(document,nodePath)).setText(text);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		/**
		 * 修改指定节点元素的内容
		 * @param document
		 * @param nodePath
		 * @param attrName
		 * @param attrValue
		 * @param text
		 */
		public static void setElementText(Object document,String nodePath,String attrName,String attrValue,String text){
			nodePath +="[@" + attrName + "='" + attrValue + "']";
			setElementText(document,nodePath,text);
		}

		/**
		 * 设置xml的编码格式
		 * @param encode
		 */
		public static void setEncoding(String encode){
			format.setEncoding(encode);
		}
		/**
		 * 用DTD文档类型定义校验xml文档
		 * @param content
		 * @return
		 */
		// public static boolean validate(){
		// SAXBuilder builder = new SAXBuilder(true);
		// try{
		// // Jdom complains about the document even though it is valid
		// ByteArrayInputStream bais=new ByteArrayInputStream(content.getBytes());
		// builder.build(bais);
		// return true;
		// 
		// } catch (Exception e) {
		// 
		// return false;
		// 
		// }
		// 
		// }
	}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -