使用JAVA解析XML文件步骤

以前的时候,也解析过,今天又拿出来解析就让忘记怎么解析了,后来在网上查还有自己想,终于解析出来了,下面就是原XML文件:
accp.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE accp SYSTEM "accp.dtd">
<?xml-stylesheet type="text/css" href="accp.css"?>
<accp>
    <teachers>
        <teacher >
            <name>刘老师</name>
            <age>30</age>
            <degree>硕士</degree>
            <position>Java</position>        
        </teacher>
        <teacher>
            <name>李老师</name>
            <age>28</age>
            <degree>本科</degree>
            <position>.Net</position>        
        </teacher>
    </teachers>
    <students>
        <student>
            <name>高胜寒</name>
            <age>21</age>            
            <grade>Y2</grade>
            <school>北京中心</school>
        </student>
        <student>
            <name>信达雅</name>
            <age>19</age>
            <grade>S2</grade>
            <school>天津中心</school>
        </student>
    </students>
</accp>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
还需要一个dtd文件accp.dtd:

<!ELEMENT accp (teachers,students)>
<!ELEMENT teachers (teacher*)>
<!ELEMENT students (student*)>
<!ELEMENT teacher (name,age,degree,position)>
<!ELEMENT student (name,age,grade,school)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT degree (#PCDATA)>
<!ELEMENT position (#PCDATA)>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT school (#PCDATA)>
1
2
3
4
5
6
7
8
9
10
11
最后就是解析的代码了:

//解析xml文件
    public static void Test1(){
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //从DOM工厂获得DOM解析器
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            //解析文档,得到一个dom树
            Document doc = db.parse("accp.xml");
            //得到所有的teacher节点
            NodeList teaList = doc.getElementsByTagName("teacher");
            System.out.println("xml里面共有"+teaList.getLength()+"个老师信息!");
            //循环老师信息
            for (int i = 0; i < teaList.getLength(); i++) {
                Node teacher = teaList.item(i);
                //获取第i个老师的信息的id值并输出
                /*Element element = (Element)teacher;
                String id = element.getAttribute("id");
                System.out.println("id:"+id);*/
                //获取第i个老师元素的所有子元素的名称和值并输出
                for(Node node=teacher.getFirstChild();node!=null;node =node.getNextSibling() ){
                    if(node.getNodeType()==Node.ELEMENT_NODE){
                        String value = node.getFirstChild().getNodeValue();
                        System.out.print("name:"+value+"\t");
                    }
                }
                System.out.println();
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
最后看一下运行结果:

 ———————————————— 
版权声明:本文为CSDN博主「穆雄雄」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34137397/article/details/96482139

以前的时候,也解析过,今天又拿出来解析就让忘记怎么解析了,后来在网上查还有自己想,终于解析出来了,下面就是原XML文件:
accp.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE accp SYSTEM "accp.dtd">
<?xml-stylesheet type="text/css" href="accp.css"?>
<accp>
    <teachers>
        <teacher >
            <name>刘老师</name>
            <age>30</age>
            <degree>硕士</degree>
            <position>Java</position>        
        </teacher>
        <teacher>
            <name>李老师</name>
            <age>28</age>
            <degree>本科</degree>
            <position>.Net</position>        
        </teacher>
    </teachers>
    <students>
        <student>
            <name>高胜寒</name>
            <age>21</age>            
            <grade>Y2</grade>
            <school>北京中心</school>
        </student>
        <student>
            <name>信达雅</name>
            <age>19</age>
            <grade>S2</grade>
            <school>天津中心</school>
        </student>
    </students>
</accp>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
还需要一个dtd文件accp.dtd:

<!ELEMENT accp (teachers,students)>
<!ELEMENT teachers (teacher*)>
<!ELEMENT students (student*)>
<!ELEMENT teacher (name,age,degree,position)>
<!ELEMENT student (name,age,grade,school)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT degree (#PCDATA)>
<!ELEMENT position (#PCDATA)>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT school (#PCDATA)>
1
2
3
4
5
6
7
8
9
10
11
最后就是解析的代码了:

//解析xml文件
    public static void Test1(){
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //从DOM工厂获得DOM解析器
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            //解析文档,得到一个dom树
            Document doc = db.parse("accp.xml");
            //得到所有的teacher节点
            NodeList teaList = doc.getElementsByTagName("teacher");
            System.out.println("xml里面共有"+teaList.getLength()+"个老师信息!");
            //循环老师信息
            for (int i = 0; i < teaList.getLength(); i++) {
                Node teacher = teaList.item(i);
                //获取第i个老师的信息的id值并输出
                /*Element element = (Element)teacher;
                String id = element.getAttribute("id");
                System.out.println("id:"+id);*/
                //获取第i个老师元素的所有子元素的名称和值并输出
                for(Node node=teacher.getFirstChild();node!=null;node =node.getNextSibling() ){
                    if(node.getNodeType()==Node.ELEMENT_NODE){
                        String value = node.getFirstChild().getNodeValue();
                        System.out.print("name:"+value+"\t");
                    }
                }
                System.out.println();
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
最后看一下运行结果:


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值