`
jyangzi5
  • 浏览: 207500 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JDOM 解析XML

    博客分类:
  • IO
XML 
阅读更多

package cn.com.xml;

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;

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);
 }

 /**
  * 修改指定节点元素的属性
  *
  * @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 void main(String[] args) throws Exception {
  Document doc = XMLUtil.readDocument("test.xml");
  List shapes = XMLUtil.getChildrenElement(doc, "javer/leo/example");
  for (int i = 0; i < 8; i++) {
   System.out.println(XMLUtil.getChildElement(shapes.get(i), "id")
     .getText());
  }
 }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics