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的基本结构。JDOM通过Document对象表示整个XML文档,Element代表XML元素,Attribute表示元素属性,Text表示元素内的文本内容。这些类构成了...
Java JDOM解析XML是Java开发中处理XML文档的一种方法,JDOM全称为Java Document Object Model,它是一个基于Java语言的API,用于创建、修改和读取XML文档。JDOM为XML处理提供了一种高效且方便的解决方案,尤其适用于...
**Java与XML:JDOM解析XML的详细指南** 在Java编程中,XML(eXtensible Markup Language)是一种被广泛使用的数据交换格式,用于存储结构化数据。为了处理XML文档,开发者可以使用多种库,其中之一就是JDOM。JDOM是...
**JDOM解析XML文件** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java中,JDOM(Java Document Object Model)是一个流行的选择来解析和操作...
在这个例子中,我们将深入探讨如何使用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文件,并基于XML中的类名生成相应的对象。 首先,我们需要理解JDOM的基本概念。JDOM提供了一组Java对象来表示XML文档,包括Element(元素)、Attribute(属性)、Text(文本...
本篇文章将深入探讨如何利用JDOM解析XML文件,以及在这个过程中涉及的关键知识点。 首先,我们需要了解XML(Extensible Markup Language)的基本概念。XML是一种标记语言,用于存储和传输结构化数据。它的结构清晰...
使用JDOM解析XML文档通常包括以下几个步骤: 1. 创建`SAXBuilder`实例,这是JDOM提供的解析器,可以将XML输入源转换为`Document`对象。 2. 使用`SAXBuilder`的`build`方法读取XML文件,生成`Document`对象。 3. ...
1. `JDOMUtil.java`:这是一个Java类,包含了使用JDOM解析XML的主要代码。在这个例子中,我们将学习如何读取XML文件,创建一个`SAXBuilder`对象来构建XML文档的DOM(文档对象模型)表示,然后通过`Document`对象来...
在这个小实例中,我们将深入探讨如何使用JDOM解析XML文件。 首先,我们需要引入JDOM的依赖。在Java项目中,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.jdom <artifactId>...
要使用JDOM解析XML,首先需要将JDOM的jar文件(如jdom.jar)添加到项目的类路径中。此外,由于XML解析通常涉及到其他库,如XPath解析和DTD处理,我们看到压缩包中还包含了一些其他相关的jar文件: 1. xalan.jar:...
Java 使用 JDOM 解析 XML 文件 Java 是一种广泛使用的程序设计语言,而 XML 是一种广泛使用的标记语言,用于存储和传输数据。在 Java 中,解析 XML 文件是一件常见的任务,而 JDOM 是一个流行的开源库,用于解析和...
### jdom解析XML文件及将字符串解析为XML #### 一、JDOM简介与环境搭建 JDOM(Java Document Object Model)是一种用Java语言编写的轻量级API,用于处理XML文档。它允许开发者轻松地读取、创建、修改XML文档,并将...
**JDOM解析XML详解** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件等领域。在Java中,有多种解析XML的库,其中之一就是JDOM。JDOM是一个专为Java设计的XML API,它...
### JDOM解析XML的基本概念 1. **DOM(Document Object Model)**:DOM是一种树形结构,将XML文档解析为一系列的对象,这些对象可以被Java程序访问和操作。JDOM就是基于DOM模型的实现。 2. **Element**: 在JDOM中...
这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...
下面是一些使用JDOM解析XML的基本步骤: 1. **导入必要的JDOM库**:首先在Java源代码中导入JDOM相关的类,如: ```java import org.jdom.Document; import org.jdom.input.SAXBuilder; ``` 2. **创建SAXBuilder...