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
这是我做的简单的一个在jsp中用jdom解析xml的程序。只是显示,添加等简单的功能,来学习学习jdom解析xml的程序。如果你想学习那这一定是个很好的例子
jdom解析xml文件小实例jdom解析xml文件小实例jdom解析xml文件小实例
jdom解析xml文件的源代码、jar包以及示例xml文件
基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发源码-用jdom解析xml.zip 基于java的开发...
NULL 博文链接:https://xurichusheng.iteye.com/blog/1518547
一个关于用jdom解析xml,遍历xml,建立xml的简单例子.
利用JDOM解析xml文件,并根据xml中为类名,生成相应的对象。
jdom解析XML(修改为比较通用的方法) jdom解析XML(修改为比较通用的方法) jdom解析XML(修改为比较通用的方法)
Jdom操作、创建和解析XML Jdom操作、创建和解析XML Jdom操作、创建和解析XML
jdom解析XML文件and把字符串解析成XML.txt jdom解析XML文件and把字符串解析成XML.txtjdom解析XML文件and把字符串解析成XML.txt
JDOM解析XML.rar JDOM解析XML.rar JDOM解析XML.rar
Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 Dom JDom 解析xml 文件 自己使用 最好不要下载
这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...
使用JDM技术解析XML文档,在了解此程序前请到JDOM官网下载一个JDOM的类包,然后配置环境变量或者将类包连接到eclipse路径中,此程序完全可以运行,在压缩包中还包括原xml文档!!!请参考!
Java中使用jdom解析xml的案例, 以及文档说明。
xml样例 博文链接:https://jingrenlang.iteye.com/blog/356160
NULL 博文链接:https://songlitao.iteye.com/blog/2257789
jdom-1.0 jdom jdom-1.0,jdom解析xml
解析XML的好帮手,大家来看看吧,包你用得着,附带JAR包使用说明