您的位置:首页 > 职场人生

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

2013-04-01 18:31 399 查看
-------
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: