文档章节

使用Java解析XML文件并在控制台原样输出

笑笑虎Hello
 笑笑虎Hello
发布于 2017/09/01 00:54
字数 459
阅读 20
收藏 0

这是我第一次写博客,今天初次接触XML文件的解析,感觉有点绕,但是最后还是自己做出来了,想想还是写写吧,记录自己的成长历程

xml文件样式:

<?xml version="1.0" encoding="utf-8"?>
<students>
    <student id="001">   
        <name>张三</name>     
        <age>23</age>    
        
<address>USA</address>    
    </student>
    <student id="002">
        <name>李四</name>
        <age>24</age>
        <address>USA</address>
    </student>
    <student id="003">
        <name>王五</name>
        <age>25</age>
        <address>USA</address>
    </student>
</students>

Java代码:

package com.gem.java.parsexml;

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.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class CompleteParseXML {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        Document document=builder.parse("src/hello.xml");
        
        Element students=document.getDocumentElement();
        System.out.print("<"+students.getNodeName()+">");
        NodeList stuNodeList=students.getChildNodes();
        for (int i = 0; i < stuNodeList.getLength(); i++) {
            Node stuNode=stuNodeList.item(i);
            printNode(stuNode);
        }
        System.out.print("</"+students.getNodeName()+">");
    }
    
    static void printNode(Node node){
        if(node.getNodeType()==Node.ELEMENT_NODE){
            System.out.print("<"+node.getNodeName());
            NamedNodeMap attr=node.getAttributes();
            for (int i = 0; i < attr.getLength(); i++) {
                Node attrNode=attr.item(i);
                System.out.print(" "+attrNode.getNodeName()+"=\""+attrNode.getNodeValue()+"\"");
            }
            System.out.print(">");
            NodeList childsNode=node.getChildNodes();
            for (int i = 0; i < childsNode.getLength(); i++) {
                Node childNode=childsNode.item(i);
                printNode(childNode);
            }
            System.out.print("</"+node.getNodeName()+">");
        }else {
            System.out.print(node.getNodeValue());
        }
        
    }
}
首先要获取到文档的根节点元素,节点有元素节点,属性节点,文本节点。标签 <student id="001"></student>下有七个子节点,这个很容易被弄错,红色标出的是4个文本节点,另外3个标签是元素节点。我个人感觉DOM操作的API有点不按套路出牌,比如获取节点NodeList类型变量中获取子节点用item(index),我直接用了get(index),发现不对,又用了数组的取值方式,也是不对,最后才弄出来,还有获取其长度时使用getLength(),而不是length或者size(),这些都是要注意的,很容易因为惯性就写错了。我代码写的不是很好,如果有什么问题和建议欢迎大家给我提,就写到这吧。加油!

© 著作权归作者所有

共有 人打赏支持
笑笑虎Hello
粉丝 2
博文 5
码字总数 1110
作品 0
苏州
程序员
【XML系列】详解JDOM解析XML

【XML系列】详解JDOM解析XML 一、前言 JDOM是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。...

磊神Ray
2011/11/01
0
0
Digester解析xml总结

Digester用户解析xml文件形成java对象;Digester做法是: 1、先定义Digester的规则,(指明遇到xpath干什么) 2、定义好digester对象后,给一个需要解析的xml文件的输入流,开始解析,然后输...

P&H
2014/01/02
0
0
Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/23
0
0
android访问天气服务01--构建XmlPullParser

Pull模式解析原理: 与SAX解析器模拟相似,也提供了类似的事件驱动.使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进...

攀爬的小瓜牛
2014/09/01
0
0
xStream完美转换XML、JSON

xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; 前面有介绍过json-lib这个框架,在线博文:http://www.cnblog...

DavidBao
2015/05/01
0
1

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
47
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
41
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
45
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
40
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部