`

解析XML

阅读更多
Jdom:Opensource,free
Commons_Configuration:Apache公司的
W3Cdom:已经被收录到java名下,在org.w3c.dom包中。

books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book>
		<name>哈里波特</name>
		<price>10</price>
		<memo>这是一本很好看的书。</memo>
	</book>
	<book id="B02">
		<name>三国演义</name>
		<price>10</price>
		<memo>四大名著之一。</memo>
	</book>
	<book id="B03">
		<name>水浒</name>
		<price>6</price>
		<memo>四大名著之一。</memo>
	</book>
	<book id="B04">
		<name>a</name>
		<price>5</price>
		<memo>四大名著之一。</memo>
	</book>
	
</books>



jdom解析:

package test;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Iterator;
import java.util.List;

//下面是引用到JDOM中的类
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Text;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;

public class testJdom {
	public static void main(String[] args) {
		try {

			/*******************************************************************
			 * 解析books.xml
			 */
			String xPath = "./src/books.xml";
			// SAXBuilder负责从文件、流、URL等来构建一个JDOM document
			SAXBuilder builder = new SAXBuilder(false);
			Document doc = builder.build(xPath);
			Element books = doc.getRootElement();
			// 设置输出到控制台
			PrintStream pr = System.out;
			Format format = Format.getCompactFormat(); // 创建输出格式
			format.setEncoding("GBK"); // 编码
			format.setIndent("    ");
			XMLOutputter out = new XMLOutputter(format);
            
			// --- 新建一个元素 ----
			System.out.println("++++++++++++新增一本书开始++++++++++++");
			Element theBook = new Element("book");
			Element theElem = new Element("name");
			theElem.setText("新加的书名");
			Element thePrice = new Element("price");
			// 增加一个属性
			thePrice.setAttribute("incread", "yes");
			thePrice.setText("50");
			theBook.addContent(theElem);
			theBook.addContent(thePrice);
			books.addContent(theBook);
			out.output(doc, pr);
			System.out.println(out.toString());
			System.out.println("++++++++++++新增一本书结束++++++++++++");

			System.out.println("+++++++++++条件查询	++++++++++++");
			// --- 多个条件查询---
			// 选取books下的所有book元素
			List find1 = XPath.selectNodes(books, "/books/book");
			// 选取books下的所有book的子元素price>10的元素
			List find2 = XPath.selectNodes(books, "/books/book[price=10]");
			// 这里的查询不支持中文??????
			List find3 = XPath.selectNodes(books, "/books/book[name='a']");
			// 打印出是价钱是六块钱的书名
			String book1 = ((Text) XPath.selectSingleNode(books,
					"/books/book[price=6]/name/text()")).getTextNormalize();
			System.out.println(book1);
			// 选取所有 books 元素的 book 元素,且其中的 book 元素拥有名为 id 的属性。
			List find4 = XPath.selectNodes(books, "/books/book[@id]");
			// 选取所有 books 元素的 book 元素,且其中的 book 元素的id属性值须等于B02。
			List find5 = XPath.selectNodes(books, "/books/book[@id='B02']");

			// System.out.println("find.size" + find5.size() + "--");
			// Element findelement = (Element) find5.get(0);
			// out.output(findelement, pr);
			System.out.println("查询结束");

			
			
			
			System.out.println("+++++++++++删除、修改元素及属性(删除B02 三国演义)	++++++++++");

			Element eleB02 = (Element) XPath.selectSingleNode(books,
					"/books/book[@id='B02']");
			// 下面这条语句会把books中的所有子元素删除,添加此文本元素节点
			// --- books.setText("dfdfdfd");
			// 添加此文本元素节点
			// ---books.addContent("dfdfdfd");
			// 删除元素的第一种方法,先找到元素
			// --books.removeContent(eleB02);
			// 修改元素的属性
			eleB02.setAttribute("name", "三国演****义");
			//删除一个元素的属性
			//--eleB02.removeAttribute("属性名");
			out.output(books, pr);

			// 将文件写回到XML文件
			// out.output(doc,new FileOutputStream(xPath));

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}
}




w3cDOM 解析
package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.*;
import javax.xml.xpath.*;

public class testDom {
	public static void main(String[] args) {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		Element theBook = null, theElem = null, root = null;
		try {
			factory.setIgnoringElementContentWhitespace(true);

			DocumentBuilder db = factory.newDocumentBuilder();
			Document xmldoc = db.parse(new File("./src/books.xml"));
			root = xmldoc.getDocumentElement();

			// --- 新建一本书开始 ----
			theBook = xmldoc.createElement("book");
			theElem = xmldoc.createElement("name");
			theElem.setTextContent("新书");
			theBook.appendChild(theElem);

			theElem = xmldoc.createElement("price");
			theElem.setTextContent("20");
			theBook.appendChild(theElem);

			theElem = xmldoc.createElement("memo");
			theElem.setTextContent("新书的更好看。");
			theBook.appendChild(theElem);
			root.appendChild(theBook);
			System.out.println("---  新建一本书开始 ----");
			output(xmldoc);
			System.out.println("---  新建一本书完成 ----");
			// --- 新建一本书完成 ----

			// --- 下面对《哈里波特》做一些修改。 ----
			// --- 查询找《哈里波特》----
			theBook = (Element) selectSingleNode("/books/book[name='哈里波特']",
					root);
			System.out.println("---  查询找《哈里波特》 ----");
			output(theBook);
			// --- 此时修改这本书的价格 -----
			theBook.getElementsByTagName("price").item(0).setTextContent("15");// getElementsByTagName返回的是NodeList,所以要跟上item(0)
			System.out.println("---  此时修改这本书的价格 ----");
			output(theBook);
			// --- 另外还想加一个属性id,值为B01 ----
			theBook.setAttribute("id", "B01");
			System.out.println("---  另外还想加一个属性id,值为B01 ----");
			output(theBook);
			// --- 对《哈里波特》修改完成。 ----

			// --- 要用id属性删除《三国演义》这本书 ----
			theBook = (Element) selectSingleNode("/books/book[@id='B02']",
					root);
			System.out.println("---  要用id属性删除《三国演义》这本书 ----");
			output(theBook);
			theBook.getParentNode().removeChild(theBook);
			System.out.println("---  删除后的XML ----");
			output(xmldoc);

			// --- 再将所有价格低于10的书删除 ----
		
			NodeList someBooks = selectNodes("/books/book[price<10]", root);
			System.out.println("---  再将所有价格低于10的书删除  ---");
			System.out.println("---  符合条件的书有 " + someBooks.getLength()
					+ "本。  ---");
			for (int i = 0; i < someBooks.getLength(); i++) {
				someBooks.item(i).getParentNode()
						.removeChild(someBooks.item(i));
			}
			output(xmldoc);

			saveXml("Test1_Edited.xml", xmldoc);
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void output(Node node) {// 将node的XML字符串输出到控制台
		TransformerFactory transFactory = TransformerFactory.newInstance();
		try {
			Transformer transformer = transFactory.newTransformer();
			transformer.setOutputProperty("encoding", "gb2312");
			transformer.setOutputProperty("indent", "yes");

			DOMSource source = new DOMSource();
			source.setNode(node);
			StreamResult result = new StreamResult();
			result.setOutputStream(System.out);

			transformer.transform(source, result);
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		}
	}

	public static Node selectSingleNode(String express, Object source) {// 查找节点,并返回第一个符合条件节点
		Node result = null;
		XPathFactory xpathFactory = XPathFactory.newInstance();
		XPath xpath = xpathFactory.newXPath();
		try {
			result = (Node) xpath
					.evaluate(express, source, XPathConstants.NODE);
		} catch (XPathExpressionException e) {
			e.printStackTrace();
		}

		return result;
	}

	public static NodeList selectNodes(String express, Object source) {// 查找节点,返回符合条件的节点集。
		NodeList result = null;
		XPathFactory xpathFactory = XPathFactory.newInstance();
		XPath xpath = xpathFactory.newXPath();
		try {
			result = (NodeList) xpath.evaluate(express, source,
					XPathConstants.NODESET);
		} catch (XPathExpressionException e) {
			e.printStackTrace();
		}

		return result;
	}

	public static void saveXml(String fileName, Document doc) {// 将Document输出到文件
		TransformerFactory transFactory = TransformerFactory.newInstance();
		try {
			Transformer transformer = transFactory.newTransformer();
			transformer.setOutputProperty("indent", "yes");

			DOMSource source = new DOMSource();
			source.setNode(doc);
			StreamResult result = new StreamResult();
			result.setOutputStream(new FileOutputStream(fileName));

			transformer.transform(source, result);
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}



Commons_Configuration解析
package test;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;

public class testCommonsConfiguration {
	public static void main(String args[]) {

		try {
			String file = "./src/books.xml";
			XMLConfiguration config = new XMLConfiguration(file);
			System.out.println("成功加载:" + file);
			String btime = config.getString("book.name");
            System.out.println("书名:" + btime);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}




Commons_Configuration api:http://commons.apache.org/configuration/apidocs/index.html
jdom API:见附件
分享到:
评论

相关推荐

    PB 解析XML (代码案例)

    标题中的“PB 解析XML”指的是使用PowerBuilder(简称PB)这一编程工具处理XML数据的过程。PowerBuilder是一款广泛用于开发企业级应用的可视化编程环境,它支持多种数据格式,包括XML。XML(eXtensible Markup ...

    C++解析xml文件

    本文将深入探讨如何使用C++来解析XML文件,主要围绕“C++实现对xml文件的解析”这一主题展开。 XML文件通常包含一系列元素,每个元素都有开始标签、结束标签和可能的属性。C++中解析XML文件的方法多种多样,这里...

    解析xml的jar包

    解析XML是将XML文档转换为程序可以理解的数据结构的关键步骤。本文将深入探讨XML解析的基本概念、常用方法以及相关的Java库——JDOM。 XML文档由一系列元素构成,每个元素都包含标签、属性和内容。解析XML的过程...

    delphi解析xml文件实例

    本实例将详细探讨如何在Delphi 7中解析XML文件。 首先,我们需要引入必要的单元,如`Classes`和`XMLDoc`,它们包含了处理XML的基本类。`Classes`单元提供了基础的TStringList等类型,而`XMLDoc`单元则包含了...

    C++解析xml文档或者xml字符串方法

    在C++中,解析XML文档或XML字符串是常见的任务,特别是在需要与JavaScript或其他不支持指针的语言交互时。本文将详细介绍如何在Visual Studio 2010环境下利用Microsoft的MSXML库来处理XML数据。 首先,让我们看看...

    PB 解析xml格式串

    在“PB解析xml格式串”的主题中,我们主要关注如何将XML格式的数据转换为Protocol Buffers的二进制格式,以便于高效地存储和传输。以下是一些相关的知识点: 1. **Protocol Buffers介绍**:PB是一种高效的序列化...

    STM32解析XML

    在本文中,我们将深入探讨如何在STM32F107上使用minixml库解析XML(可扩展标记语言)文档,这对于那些初次尝试在嵌入式环境中处理XML数据的开发者来说,是非常有价值的。 XML是一种通用的数据交换格式,它允许结构...

    STM32解析XML完整工程.zip

    在本项目"STM32解析XML完整工程.zip"中,重点是实现STM32利用软件资源处理XML(eXtensible Markup Language)文件。XML是一种用于标记数据的标准格式,常用于存储和传输结构化数据,例如配置文件、设备通信协议等。 ...

    domino通过lotusscript解析xml

    在标题“domino通过lotusscript解析xml”中,我们关注的重点是使用Lotusscript来解析XML文件。解析XML意味着读取其结构并从中提取所需的信息。在Lotusscript中,我们可以使用内置的XML处理对象,如`XMLDocument`,来...

    C#解析XML文件并用WinForm显示

    在本文中,我们将深入探讨如何使用C#编程语言解析XML文件,并将其内容在Windows Forms(WinForm)应用程序中展示。XML(eXtensible Markup Language)是一种数据存储和交换的标准格式,而C#是Microsoft .NET框架下...

    使用JDOM解析XML文件

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

    使用javascript解析xml文件或xml格式字符串中文WORD版

    资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版   内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...

    PB解析XML字符串 把XML 变为数据窗口

    标题中的“PB解析XML字符串 把XML 变为数据窗口”指的是使用PowerBuilder(PB)这一编程工具,处理XML格式的数据,并将其转换成数据窗口对象的过程。数据窗口是PowerBuilder中的一个核心组件,用于显示、编辑和管理...

    JAVA JAXB 解析XML嵌套子节点为字符串

    使用JAXB解析XML时,我们首先需要创建一个Java类模型,这个模型反映了XML文档的结构。每个XML元素对应一个Java类,类的属性对应元素的属性或子元素。例如,如果XML中有以下结构: ```xml &lt;text&gt;Some text here ...

    java 解析xml 多级

    Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...

    android下解析xml文件的demo

    本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...

    解析XML特殊字符方法

    有两种主要方法来解析XML中的特殊字符: **方法一:使用实体引用** 实体引用是XML中最常见的处理特殊字符的方式。当你需要在XML文档中插入特殊字符时,可以使用对应的实体引用。比如,如果你想在文本中包含一个...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    STM32使用ezxml解析XML文件

    4. **解析XML**:使用ezxml库的核心函数`ezxml_parse()`解析XML文件。这个函数会返回一个ezxml_t类型的根节点,代表整个XML文档。然后,可以使用`child()`, `tag()`, `attr()`, `text()`等方法来遍历和访问XML树。 ...

    js解析XML文件

    JS 解析 XML 文件 作为一名 IT 行业大师,我将从给定的文件中生成相关知识点,涵盖 JS 解析 XML 文件的各种方面。 JS 解析 XML 文件的必要性 在当前的 web 开发中,XML 文件广泛应用于数据交换和存储。因此,如何...

Global site tag (gtag.js) - Google Analytics