Java中使用DOM方法解析XML文件

Java中使用DOM方法解析XML文件

1、简介

XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML,本博客将介绍用DOM方法解析XML文件的方法,DOM解析是将XML文件全部载入到内存,组装成一颗DOM树,然后通过节点以及节点之间的关系来解析XML文件。


2、基本任务和代码

1)任务内容
使用DOM方法解析以下XML文件:


<root>
<hang>
<产品唯一ID>产品唯一ID产品唯一ID>
<通用名>通用名通用名>
<商品名>商品名商品名>
<剂型>剂型剂型>
<批准文号>批准文号批准文号>
<规格>规格规格>
<包装说明>包装说明包装说明>
<包装单位>包装单位包装单位>
<生产企业>生产企业生产企业>
<大包装转换比>大包装转换比大包装转换比>
<中包装转换比>中包装转换比中包装转换比>
<备注>备注备注>
<库存>库存库存>
<供应价>供应价供应价>
<是否上架>是否上架是否上架>
hang>
<hang>
<产品唯一ID>a121产品唯一ID>
<通用名>b12通用名>
<商品名>c231商品名>
<剂型>dewrwer剂型>
<批准文号>e324324批准文号>
<规格>f45645规格>
<包装说明>g4543包装说明>
<包装单位>hq324e2包装单位>
<生产企业>i76生产企业>
<大包装转换比>j453大包装转换比>
<中包装转换比>k4r43r中包装转换比>
<备注>le4tr4备注>
<库存>mq3e2库存>
<供应价>nefrw供应价>
<是否上架>o56是否上架>
hang>
root>

2)任务代码
使用DOM解析XML文件步骤:
step1、创建解析器工厂对象 DocumentBuildFactory;
step2、由解析器工厂对象创建解析器对象DocumentBuilder;
step3、由解析器对象对指定XML文件进行解析,构建相应的DOM树,创建Document对象;
step4、以Document对象为起点对DOM树的节点进行查询;
step5、使用Document的getElementsByTagName方法获取元素名称,生成一个NodeList集;
step6、遍历集合;

任务代码如下:

import java.io.*;//导入java.io包下的所有类
import org.w3c.dom.*;//使用org.w3c.dom操作XML文件 
import org.xml.sax.SAXException;//使用org.xml.sax.SAXException读取文件
import javax.xml.parsers.*; //导入 javax.xml.parsers包下的所有类
public class Test{//类名
    public static void main(String[] args){//程序主入口函数,带命令行参数
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//创建DOM模式的解析器工厂对象
        try{//try代码块,当发生异常时会转到catch代码块中
            DocumentBuilder builder=factory.newDocumentBuilder();//得到一个DOM解析器对象  
            Document doc=builder.parse(new File("D:\\test\\XML.xml"));//打开指定路径下的xml文件  
            NodeList nl=doc.getElementsByTagName("hang");//获得文件的值  
            for (int i=0; i < nl.getLength(); i++){//for循环的条件
                System.out.println(doc.getElementsByTagName("产品唯一ID").item(i)
                        .getFirstChild().getNodeValue());//获取“产品唯一ID”的信息   
                System.out.println(doc.getElementsByTagName("通用名").item(i)  
                        .getFirstChild().getNodeValue());//获取“通用名”的信息   
                System.out.println(doc.getElementsByTagName("商品名").item(i)  
                        .getFirstChild().getNodeValue());//获取“商品名”的信息   
                System.out.println(doc.getElementsByTagName("剂型").item(i)  
                        .getFirstChild().getNodeValue());//获取“剂型”的信息 
                System.out.println(doc.getElementsByTagName("批准文号").item(i)  
                        .getFirstChild().getNodeValue());//获取“批准文号”的信息 
                System.out.println(doc.getElementsByTagName("规格").item(i)  
                        .getFirstChild().getNodeValue());//获取“规格”的信息 
                System.out.println(doc.getElementsByTagName("包装说明").item(i)  
                        .getFirstChild().getNodeValue());//获取“包装说明”的信息 
                System.out.println(doc.getElementsByTagName("包装单位").item(i)  
                        .getFirstChild().getNodeValue());//获取“包装单位”的信息 
                System.out.println(doc.getElementsByTagName("生产企业").item(i)  
                        .getFirstChild().getNodeValue());//获取“生产企业”的信息 
                System.out.println(doc.getElementsByTagName("大包装转换比").item(i)  
                        .getFirstChild().getNodeValue());//获取“大包装转换比”的信息 
                System.out.println(doc.getElementsByTagName("中包装转换比").item(i)  
                        .getFirstChild().getNodeValue());//获取“中包装转换比”的信息 
                System.out.println(doc.getElementsByTagName("备注").item(i)  
                        .getFirstChild().getNodeValue());//获取“备注”的信息 
                System.out.println(doc.getElementsByTagName("库存").item(i)  
                        .getFirstChild().getNodeValue());//获取“库存”的信息 
                System.out.println(doc.getElementsByTagName("供应价").item(i)  
                        .getFirstChild().getNodeValue());//获取“供应价”的信息 
                System.out.println(doc.getElementsByTagName("是否上架").item(i)  
                        .getFirstChild().getNodeValue());//获取“是否上架”的信息 
                System.out.println();//输出空字符进行格式调整
                }
            }
        catch (ParserConfigurationException e){//当try代码块有异常时转到catch代码块
            e.printStackTrace();//在命令行打印异常信息出错的位置及原因
            }
        catch (SAXException e){//当try代码块有异常时转到catch代码块
            e.printStackTrace();//在命令行打印异常信息出错的位置及原因
            }
        catch (IOException e){//当try代码块有异常时转到catch代码块
            e.printStackTrace();//在命令行打印异常信息出错的位置及原因  
            }
      }
} 

3)运行结果


3、总结

Java中除了DOM方法可以解析XML文件外,还可以使用SAX、JDOM、DOM4J等方法,我也会在之后的学习中尝试使用这些方法,我认为通过Java工程训练可以锻炼好自己的基础编程能力,如本博客有不足之处还请大家指正。

你可能感兴趣的:(Java)