Java访问xml配置文件
最近在做一个项目,要把一些经常用到的,而且基本没有修改的数据配置到xml文件中,然后要访问xml文件里面的相应数据,查阅许多资料,终于把它做出来了,在此记录一下。
我创建的是maven项目,然后MetroFactory.xml文件保存在resources目录下,具体内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<metro>
<id>1</id>
<name>一号线</name>
<child>
<id>1</id>
<name>岗顶</name>
</child>
<child>
<id>2</id>
<name>石牌桥</name>
</child>
</metro>
<metro>
<id>2</id>
<name>二号线</name>
<child>
<id>1</id>
<name>大学城南</name>
</child>
<child>
<id>2</id>
<name>大学城北</name>
</child>
</metro>
</config>
主函数如下:
public class TestDemo02 {
public static void main(String[]args){
try{
//创建工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc;
//创建document对象
doc=builder.parse(new File("src/main/resources/MetroFactory.xml"));
//获取根节点,即我的配置文件里面的config
Element root=doc.getDocumentElement();
//获取子节点数组
NodeList metroList=root.getChildNodes();
for(int i=0;i<metroList.getLength();i++){
Node metroNode=metroList.item(i);
if(metroNode!=null){
if(metroNode.getFirstChild()==null){
continue;
}
//当获取节点不为空时
for(Node node=metroNode.getFirstChild();node!=null;node=node.getNextSibling()){
if(node.getNodeName().equals("id")){
System.out.println("id="+node.getFirstChild().getNodeValue());
}else if(node.getNodeName().equals("name")){
System.out.println("name="+node.getFirstChild().getNodeValue());
}else if(node.getNodeName().equals("child")){
for(Node child=node.getFirstChild();child!=null;child=child.getNextSibling()){
if(child.getNodeName().equals("id")){
System.out.println("child-id:"+child.getFirstChild().getNodeValue());
}else if(child.getNodeName().equals("name")){
System.out.println("child-name:"+child.getFirstChild().getNodeValue());
}
}
}
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
结果如下:
不过这里还有一个问题,我访问文件是通过相对路径访问的,但是当我们把项目打包后,相对文件访问是失败的,要装换为流来操作
如下:
InputStream inputStream=this.getClass().getResourceAsStream("/MetroFactory.xml");
doc=builder.parse(inputStream);