Java读取xml文件——DOM解析《Dota2…

尝试使用Java程序的DOM解析方式,解析文件《Dota2_Heros.xml》。

【代码如下】
package sina1_xml_dom;

import java.io.IOException;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class DomTest {
public static void main(String[] args) {
// 创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//创建一个DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
//通过DocumentBuilder的parse(String file Name)方法解析xml文件,该方法return Document类型的obj
Document document = db.parse("C:\\workspace se\\sina1_xml_dom\\xml\\Dota2_Heros.xml");  //这里使用的是绝对路径
//获取所有Hero节点的集合,getElementsByTagName_r() return NodeList类型的obj
NodeList herolist = document.getElementsByTagName_r("Hero"); 
//通过herolist的getLength()方法可以获取herolist长度
System.out.println("英雄池里一共有" + herolist.getLength() + "个英雄!!!");
System.out.println();
//遍历每一个hero节点
for (int i = 0; i < herolist.getLength();   i++){
System.out.println("=====开始遍历第" + (i + 1) + "个英雄=====");
//通过item(index)方法,获取一个hero节点,nNdelist的索引值从0开始
Node hero = herolist.item(i);
//获取hero节点的所有属性集合
NamedNodeMap attrs = hero.getAttributes();
System.out.println("第" + (i+1) + "个英雄共有" +attrs.getLength() + "个名字");
//解析hero节点的子节点
NodeList childNotes = hero.getChildNodes();
//遍历hero的属性
for (int j = 0; j < attrs.getLength(); j++){
//通过item(index)方法,获取hero节点的某一个属性
Node attr = attrs.item(j);
//获取属性名
System.out.print(attr.getNodeName());
//获取属性值
System.out.println("--" + attr.getNodeValue());
}
System.out.println("第" + (i+1) + "个英雄共有" + childNotes.getLength()/2 + "个属性资料:");
//遍历childNotes获取每个节点的子节点和节点值
for (int k = 0; k < childNotes.getLength(); k++){
//区分出text类型的node以及element类型的node(获取element类型的节点名)
if (childNotes.item(k).getNodeType() == Node.ELEMENT_NODE){
System.out.print("第" + (k+1)/2 + ":" + childNotes.item(k).getNodeName());
System.out.println(childNotes.item(k).getFirstChild().getNodeValue()); //该方法获取第一个子节点的内容
}
}
System.out.println("=====第" + (i + 1) + "个英雄资料结束=====");
System.out.println();
}
} catch (ParserConfigurationExcep tion e) {
e.printStackTrace();
}catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

【运行结果如下】
英雄池里一共有2个英雄!!!

=====开始遍历第1个英雄=====
第1个英雄共有2个名字
Name1--影魔
Name2--Nevermore
第1个英雄共有13个属性资料:
第1:生命435
第2:魔法234
第3:力量15(+2.0)
第4:敏捷20(+2.9)
第5:智力18(+2.0)
第6:初始攻击35-41
第7:初始护甲1.8
第8:攻击范围500
第9:视野1800/800
第10:移动速度305
第11:弹道速度1200
第12:施法前后摇0.67/0.4
第13:攻击前后摇0.5/0.54
=====第1个英雄资料结束=====

=====开始遍历第2个英雄=====
第2个英雄共有1个名字
Name--瘟疫法师
第2个英雄共有13个属性资料:
第1:生命454
第2:魔法286
第3:力量16(+2.0)
第4:敏捷15(+1.7)
第5:智力22(+2.5)
第6:初始攻击45-49
第7:初始护甲4.22
第8:攻击范围550
第9:视野1800/800
第10:移动速度290
第11:弹道速度900
第12:施法前后摇0.7/0.8
第13:攻击前后摇0.4/0.77
=====第2个英雄资料结束=====

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值