`

解析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是一种用于标记数据的标准格式,常用于存储和传输结构化数据,例如配置文件、设备通信协议等。 ...

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

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

    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文件,...

    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文档中插入特殊字符时,可以使用对应的实体引用。比如,如果你想在文本中包含一个...

    STM32使用ezxml解析XML文件

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

    JAVA 解析XML生成XML文档实例

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

    js解析XML文件

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

Global site tag (gtag.js) - Google Analytics