黑马程序员 - Java访问XML文件 - 两种方式

本文介绍了Java中访问XML文件的两种方法,包括使用JDOM库解析myDisk.xml文件和通过XML-APIS库解析accounts.xml文件。详细讲解了每个方法的步骤,并提供了所需jar文件的下载链接。

------- android培训java培训、期待与您交流! ----------




Java访问XML文件在很多项目中都常用到,这里先贴出两个jar文件的下载连接:jdom.jar 下载   xml-api.jar下载


1、通过Jdom访问XML文件(此方法较下文第二种简单)

package com.leeyou.accessXMLFile;

import java.io.IOException;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

/**
 *    用JDOM读取XML文件步骤
 *    	1、先引入jdom.jar 文件
 *      2、再用org.jdom.input.SAXBuilder对象的build()方法创建Document对象
 *      3、然后用Document类、Element类等的方法读取所需的内容
 * 
 * @author LeeYou
 * 
 */
public class Java_Access_XMLFile_ByJdom {
	public static void main(String[] args) throws JDOMException, IOException {
		SAXBuilder sb = new SAXBuilder();
		Document doc = sb.build("Files/myDisk.xml");// 构造文档对象
		Element root = doc.getRootElement();// 取得根元素
		List<?> list = root.getChildren("disk");// 取得名字为disk的所有元素
		System.out.println("分区盘符\t\t分区容量\t\t目录数\t\t文件数");
		for (int i = 0; i < list.size(); i++) {
			Element element = (Element) list.get(i);
			String name = element.getAttributeValue("name");
			String capacity = element.getChildText("capacity");//取disk子元素capacity的内容 
			String directories = element.getChildText("directories");
			String files = element.getChildText("files");
			System.out.println(name + "\t\t" + capacity + "\t\t" + directories+ "\t\t" + files);
		}
	}
}


XML文件如下(myDisk.xml):

<?xml version="1.0" encoding="UTF-8"?>
<HD>
  <disk name="C">
    <capacity>8G</capacity>
    <directories>200</directories>
    <files>1580</files>
  </disk>

  <disk name="D">
    <capacity>10G</capacity>
    <directories>500</directories>
    <files>3000</files>
  </disk>
</HD> 


2、通过XML-APIS访问XML文件

package com.leeyou.accessXMLFile;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * 用DOM读取XML文件步骤 
 * 1、先引入dom.jar 文件
 * 2、再用DocumentBuilderFactory工厂类创建DocumentBuilder类型的实例
 * 3、然后构造Document对象、构造Element对象
 * 
 * @author LeeYou
 * 
 */
public class Java_Access_XMLFile_ByXMLAPIS1 {
	public static void main(String[] args) throws ParserConfigurationException,SAXException, IOException {
		Element root = null;
		File file = new File("Files/accounts.xml");
		DocumentBuilder db = null;
		
		//DocumentBuilderFactory dbf = null;
		//dbf = DocumentBuilderFactory.newInstance();
		//db = dbf.newDocumentBuilder();
		
		//此句将上三行代码融为一行
		db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		
		Document dt = db.parse(file);
		root = dt.getDocumentElement();// 取得第一个根元素
		
		/**
		 * 准备工作完毕,开始操作XML文件内容
		 */
		
		NodeList childNodes = root.getChildNodes();// 获得根元素下的子节点
		//System.out.println("此xml文档的子节点数为:"+childNodes.getLength());// 文档对象模型:空白处即"#text"节点

		System.out.println("类型\t\tID\t\t密码\t\t账户\t\t金额");

		String type = null , code = null, pass = null, name = null, money = null;

		for (int i = 0; i < childNodes.getLength(); i++) {
			// System.out.println("Account".equals(childNodes.item(i).getNodeName()));
			Node node = childNodes.item(i);// 获取对应位置的节点

			if ("Account".equals(node.getNodeName())) {
				type = node.getAttributes().getNamedItem("type").getNodeValue();//// 取Account元素属性type的值
				
				NodeList nodeList = node.getChildNodes();// 获取<Account>元素下每一个节点
				
				//循环取出<code>、<pass>、<name>、<money>
				for (int j = 0; j < nodeList.getLength(); j++) {
					Node detail = nodeList.item(j);
					String detail_name = detail.getNodeName();

					if ("code".equals(detail_name)) {
						code = detail.getTextContent();
					} else if ("pass".equals(detail_name)) {
						pass = detail.getTextContent();
					} else if ("name".equals(detail_name)) {
						name = detail.getTextContent();
					} else if ("money".equals(detail_name)) {
						money = detail.getTextContent();
					}
				}
				//格式化打印输出
				System.out.println(type + "\t\t" + code + "\t\t" + pass + "\t\t" + name+ "\t\t" + money);
			}
		}
	}
}


XML文件如下(accounts.xml):

<?xml version="1.0" encoding="gbk"?>
<Accounts>
	<Account type="中国银行">
		<code>100001</code>
		<pass>lisi..l</pass>
		<name>李世民</name>
		<money>1000000.00</money>
	</Account>
	<Account type="招商银行">
		<code>100002</code>
		<pass>zhsan123</pass>
		<name>张无忌</name>
		<money>1000.00</money>
	</Account>
</Accounts>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值