JDOM例子

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:Domain.java
*@DATE 2008-02-03
*
*/

public class Domain
{
 /**
 * 定义xml编码方式
 */
 public static final String ENCODING_GBK="GBK";
 public static final String ENCODING_UTF8="UTF-8";
 public static final String ENCODING_UTF16="UTF-16";
 public static final String ENCODING_GB2312="gb2312";
 public static final String ENCODING_ISO8859="ISO8859-1";
 
 private static Format format=Format.getPrettyFormat();
 
 static{
  format.setEncoding(ENCODING_UTF8);
 }
 
 /**
 * 通过给定的xml文件名来读取并且解析它
 *@param filepath要解析的xml文件路径
 *@return the JDOM document parsed from thd file.
 *@throws IOException
 * 
 */
 
 public static Document readDocument(String filePath)throws IOException
 {
  try{
   SAXBuilder builder=new SAXBuilder(false);
   Document doc=builder.build(new File(filePath));
   return doc;
  }catch(Exception ex){
   ex.printStackTrace();
   throw new IOException(ex.getMessage());
  }
 }
 
  
 /**
 * 通过InputStream来读取并且解析它
 *@param input  输入流
 *@return the JDOM document parsed from thd file.
 *@throws IOException
 * 
 */
 public static Document readDocument(InputStream inputStream)throws IOException
 {
  try{
   SAXBuilder builder=new SAXBuilder(false);
   Document doc=builder.build(inputStream);
   return doc;
  }catch(Exception ex){
   ex.printStackTrace();
   throw new IOException(ex.getMessage());
  }
 }
 
 /**
 *读取xml文件
 *@param srcFile 目标文件
 *@return the JDOM document parsed from thd file.
 *@throws IOException
 * 
 */
 
 public static Document readDocument(File srcFile)throws IOException
 {
  try{
   SAXBuilder builder=new SAXBuilder(false);
   Document doc=builder.build(srcFile);
   return doc;
  }catch(Exception ex){
   ex.printStackTrace();
   throw new IOException(ex.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 ex){
   ex.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 ex){
   ex.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 ex){
   ex.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 ex){
   ex.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,ENCODING_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,ENCODING_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;
 //
 // }
 //
 // }
 
 public static void main(String[] args) throws Exception
 {
 Document doc = Domain.readDocument("test.xml");
 //根据元素的属性值删除结点
 //Domain.removeChildElement(doc,"books/book","love","fef");
 
 //增加一个元素
 Element e=new Element("title");
 e.setAttribute("id","1");
 e.setText("dddd");
 
 List shapes = Domain.getChildrenElement(doc, "books/book");
 
 for(int i=0;i<shapes.size();i++){
  System.out.println(Domain.getChildElement(shapes.get(i), "name").getText());
 }
 
 Domain.outputDocument(doc);
 }

}
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值