文档章节

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

笑笑虎Hello
 笑笑虎Hello
发布于 2017/09/01 00:54
字数 459
阅读 442
收藏 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
崇明
程序员
私信 提问
加载中

评论(0)

推荐几款常用的Eclipse插件

Eclipse 应该说是老牌也是最常用的Java开发工具,尽管这几年 InstelliJ IDEA 的发展势头很强劲,身边使用和推崇的人也大有人在,但个人而言还是觉有些不太习惯。这里也介绍几款自己常用的插...

osc_p8sbsl3n
2018/04/07
4
0
MyBatis(1)优点&介绍&工程

本次全部学习内容:MyBatisLearning 一:jabc的相关说明: jdbc编程步骤: 加载数据库驱动 创建并获取数据库链接 创建jdbc statement对象 设置sql语句 设置sql语句中的参数(使用preparedSta...

osc_ppqrx03f
2018/10/05
1
0
Mybatis入门及Dao开发方式

本节内容: Mybatis介绍 使用jdbc编程问题总结 Mybatis架构 Mybatis入门程序 Dao的开发方式 SqlMapConfig.xml文件说明 一、Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个...

osc_w1ib22jk
2018/02/06
1
0
《Netty学习笔记》:Http+Xml协议栈,Jibx自动绑定使用排坑

最近在学习《netty权威指南》,在第十章搭建http+xml服务器中,使用到了Jibx绑定对象和ant配置。书中对这一部分描述太少,同时我的为maven项目,在代码过程中遇到一些坑。在此记录总结一下。...

icecrea
2019/06/27
0
0
Java中转义字符反斜杠 \ 的代替方法 | repalceAll 内涵解析

java中转义字符反斜杠 的代替方法 | repalceAll 内涵解析 一、需求 现有一个字符串str 1 2 在控制台的输出为: 1 目标:将str转化为标准的json格式串str1,以调用JsonUtil的方法,将字符串转为...

osc_tbh7hwku
2018/10/18
7
0

没有更多内容

加载失败,请刷新页面

加载更多

Python--报错RecursionError: maximum recursion depth exceeded in comparison

Python--报错RecursionError: maximum recursion depth exceeded in comparison 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本...

归子莫
昨天
21
0
聊聊SpinalTap的BinlogEventListener

序 本文主要研究一下SpinalTap的BinlogEventListener BinlogEventListener SpinalTap/spinaltap-mysql/src/main/java/com/airbnb/spinaltap/mysql/binlog_connector/BinaryLogConnectorSourc......

go4it
昨天
29
0
Spring的扩展原理

MainConfigOfExt.class /** * 扩展原理: * 1. BeanPostProcessor:bean后置处理器;bean创建对象初始化前后进行拦截工作 * BeanFactoryPostProcessor:beanFactory的后置处理器 * ...

与你同行7
昨天
37
0
C# 基础知识系列- 16 开发工具篇

0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇。这一篇主要讲解一下C#程序的结构和主要编程工具。 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看...

月影南溪
昨天
15
0
阿里双11超级工程:PB级文件分发重器蜻蜓

有图有介绍见: http://tech.it168.com/a2017/1114/3179/000003179630.shtml 蜻蜓开源地址:https://github.com/alibaba/dragonfly 2017天猫双11, 交易峰值32.5万/秒,支付峰值25.6万/秒,数...

whoisliang
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部