`
wind_bell
  • 浏览: 290886 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

用DOM/JDOM解析XML文件

    博客分类:
  • 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;

/**
* Jdom解析XML
*
* @FileName:XMLUtil.java
* @author Javer.Leo (QQ:84831612)
* @date 2006-8-16
*/
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);
}

/**
* 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 = XMLUtil.readDocument("test.xml");
List shapes = XMLUtil.getChildrenElement(doc, "javer/leo/example");
for(int i=0;i {
System.out.println(XMLUtil.getChildElement(shapes.get(i), "id").getText());
}
}
}

分享到:
评论

相关推荐

    使用JDOM解析XML文件

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

    用jdom解析xml文件

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

    Dom JDom 解析xml 文件

    在Java中,解析XML文件是常见的任务,其中DOM(Document Object Model)和JDOM是两种常用的方法。 DOM解析是XML解析的一种方式,它将整个XML文档加载到内存中,形成一个树形结构,称为DOM树。每个节点代表XML文档的...

    java 使用JDOM解析xml文件.docx

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

    java利用jdom解析xml文件

    以上就是使用JDOM解析XML文件的基本流程和关键知识点。通过JDOM,你可以轻松地处理XML文档,无论是读取还是修改,都变得轻而易举。在实际开发中,掌握XML和JDOM的操作对于处理结构化数据和接口通信至关重要。

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

    下面通过一个具体的例子来展示如何使用JDOM解析XML文件。 假设我们有如下的XML文件(`example.xml`): ```xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; 张三&lt;/name&gt; &lt;age&gt;30&lt;/age&gt; &lt;/person&gt; 李四&lt;/name...

    DOM4J/JDOM对XML的操作

    在提供的`parse()`方法中,可以看到如何使用JDOM解析XML文件。首先,通过`SAXBuilder`类创建一个解析器实例,然后调用`build()`方法,传入XML文件的路径,将XML文件转换为`Document`对象。`Document`对象是JDOM中的...

    jdom 读取XML 文件

    通过上述步骤,你就能使用JDOM有效地读取、解析和修改XML文件了。这个库提供了丰富的功能,能够满足大部分XML处理需求,同时它的API简洁直观,使得开发人员能快速上手。在实际应用中,结合JDOM与其他工具,如XPath...

    java jdom解析xml

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

    用jdom解析xml

    在这个教程中,我们将深入探讨如何在JSP(JavaServer Pages)环境中使用JDOM解析XML。 **1. JDOM基本概念** JDOM的核心在于两个主要类:`Element`和`Document`。`Element`代表XML文档中的一个节点,而`Document`则...

    DOM、JDOM、DOM4J解析XML实例

    使用JDOM解析XML的基本步骤如下: 1. **创建SAXBuilder对象**:首先创建`SAXBuilder`对象。 ```java SAXBuilder saxBuilder = new SAXBuilder(); ``` 2. **构建Document对象**:使用`SAXBuilder`解析XML文件...

    Jdom解析XML

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

    SAX, DOM, JDOM, DOM4J解析XML文件

    以下是JDOM解析XML的一个例子: ```java import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; public class JdomExample { public static void parseXML() { try { ...

    dom4j解析xml文件的压缩包

    为了使用这个库,你需要将该jar包添加到项目的类路径中,然后就可以通过DOM4J提供的类和方法来解析和操作XML文件了。 总之,DOM4J是一个功能强大的XML处理库,无论是在小型项目还是大型系统中,都能发挥其优势,...

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

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

    Jdom解析xml文件

    以下是一个简单的示例代码,演示了如何使用JDOM解析XML文件: ```java import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; import java.io.File; public class ...

    DOM、JDOM、DOM4J解析XML实例.pdf

    ### DOM、JDOM、DOM4J解析XML实例详解 #### DOM 方式解析 XML 实例解析 ##### 一、DOM 概述与应用实例 DOM(Document Object Model)是一种树状结构的标准,用于表示 XML 文档的数据结构。它将 XML 文档视为节点...

    使用DOM4j解析XML文件

    ### 使用DOM4j解析XML文件:提升开发效率与代码可读性 在现代软件开发中,XML(Extensible Markup Language)是一种广泛使用的数据交换格式,它以人类可读的文本形式存储结构化信息。然而,如何高效、准确地解析XML...

    读取XML文件的四种方法

    使用DOM方法读取XML文件,需要创建DocumentBuilderFactory对象,获取DocumentBuilder对象,然后解析XML文件得到Document对象。最后,使用Document对象的getElementsByTagName方法获取指定标签的节点列表,并遍历节点...

    JDOM解析XML

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

Global site tag (gtag.js) - Google Analytics