`
jyangzi5
  • 浏览: 212265 次
  • 性别: 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());
  }
 }
}

分享到:
评论

相关推荐

    使用JDOM解析XML文件

    本篇文章将深入探讨如何使用JDOM解析XML文件。 首先,我们需要理解JDOM的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...

    java jdom解析xml

    Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...

    用jdom解析xml

    **Java与XML:JDOM解析XML的详细指南** 在Java编程中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,用于存储结构化数据。为了处理XML文档,开发者可以使用多种库,其中之一就是JDOM。JDOM是...

    jdom解析xml文件

    **JDOM解析XML文件** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作...

    用jdom解析xml文件

    在这个例子中,我们将深入探讨如何使用JDOM解析XML文件,并进行遍历与构建。 首先,我们需要了解JDOM的基本概念。JDOM主要由三部分构成:SAXBuilder用于从XML源构建DOM树,Element代表XML文档的元素,Attribute代表...

    基于java的开发源码-用jdom解析xml.zip

    基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...

    利用JDOM解析xml文件

    本篇文章将深入探讨如何利用JDOM解析XML文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...

    java利用jdom解析xml文件

    本篇文章将深入探讨如何利用JDOM解析XML文件,以及在这个过程中涉及的关键知识点。 首先,我们需要了解XML(Extensible Markup Language)的基本概念。XML是一种标记语言,用于存储和传输结构化数据。它的结构清晰...

    Jdom解析XML

    使用JDOM解析XML文档通常包括以下几个步骤: 1. 创建`SAXBuilder`实例,这是JDOM提供的解析器,可以将XML输入源转换为`Document`对象。 2. 使用`SAXBuilder`的`build`方法读取XML文件,生成`Document`对象。 3. ...

    JDOM解析xml文档实例(自己编写,仅供参考)

    1. `JDOMUtil.java`:这是一个Java类,包含了使用JDOM解析XML的主要代码。在这个例子中,我们将学习如何读取XML文件,创建一个`SAXBuilder`对象来构建XML文档的DOM(文档对象模型)表示,然后通过`Document`对象来...

    jdom解析xml文件小实例

    在这个小实例中,我们将深入探讨如何使用JDOM解析XML文件。 首先,我们需要引入JDOM的依赖。在Java项目中,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.jdom &lt;artifactId&gt;...

    JDOM解析XML

    要使用JDOM解析XML,首先需要将JDOM的jar文件(如jdom.jar)添加到项目的类路径中。此外,由于XML解析通常涉及到其他库,如XPath解析和DTD处理,我们看到压缩包中还包含了一些其他相关的jar文件: 1. xalan.jar:...

    java 使用JDOM解析xml文件.docx

    Java 使用 JDOM 解析 XML 文件 Java 是一种广泛使用的程序设计语言,而 XML 是一种广泛使用的标记语言,用于存储和传输数据。在 Java 中,解析 XML 文件是一件常见的任务,而 JDOM 是一个流行的开源库,用于解析和...

    jdom解析XML文件and把字符串解析成XML

    ### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...

    jdom解析XML(修改为比较通用的方法)

    **JDOM解析XML详解** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件等领域。在Java中,有多种解析XML的库,其中之一就是JDOM。JDOM是一个专为Java设计的XML API,它...

    Jdom解析xml案例

    ### JDOM解析XML的基本概念 1. **DOM(Document Object Model)**:DOM是一种树形结构,将XML文档解析为一系列的对象,这些对象可以被Java程序访问和操作。JDOM就是基于DOM模型的实现。 2. **Element**: 在JDOM中...

    jdom解析xml、dtd约束xml文件

    这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...

    jdom解析xml用到的jar包

    下面是一些使用JDOM解析XML的基本步骤: 1. **导入必要的JDOM库**:首先在Java源代码中导入JDOM相关的类,如: ```java import org.jdom.Document; import org.jdom.input.SAXBuilder; ``` 2. **创建SAXBuilder...

Global site tag (gtag.js) - Google Analytics