package com.eprobj.demo;

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 Xml { public static void main(String[] args) {
//获取节点个数,以及节点属性。
// demo1();
//获取节点个数,以及节点属性, 前提是知道属性有且只有一个时候,所使用的方法。
// demo2();
////获取节点个数,以及节点属性,以及子节点信息。
demo3();
} private static void demo3() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("books.xml");
//通过book标签获取相应的节点
NodeList bookList = document.getElementsByTagName("book");
System.out.println("一共有"+bookList.getLength()+"本书!");
//遍历每一个book节点
for(int i=0; i<bookList.getLength(); i++){
Node book = bookList.item(i);
//获取book节点的所有属性
NamedNodeMap attrMap = book.getAttributes();
System.out.println("第"+(i+1)+"本书共有"+attrMap.getLength()+"个属性.");
//遍历book的属性
for (int j = 0; j < attrMap.getLength(); j++) {
//属性键值对
Node attrNode = attrMap.item(j);
System.out.println("属性名:"+attrNode.getNodeName());
System.out.println("属性值:"+attrNode.getNodeValue()); //获取节点下的所有子节点
NodeList childList =book.getChildNodes();
System.out.println("第"+(i+1)+"本书共有"+childList.getLength()+"子节点!");
//遍历节点,获取节点名称
for (int k = 0; k < childList.getLength(); k++) {
Node childNode = childList.item(k);
//如果当前节点是文字节点的话,只显示NodeNmae();
if(childNode.getNodeType() == Node.ELEMENT_NODE){
//获取element类型的节点的节点名
System.out.print("第"+(k+1)+"个子节点的节点名:"+childList.item(k).getNodeName());
//获取element类型的节点的节点值
System.out.println("--节点值是:"+childList.item(k).getFirstChild().getNodeValue());
}
}
}
}
} 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();
} } private static void demo2() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("books.xml");
//通过book标签获取相应的节点
NodeList bookList = document.getElementsByTagName("book");
System.out.println("一共有"+bookList.getLength()+"本书!");
//遍历每一个book节点
//遍历每一个book节点
for(int i=0; i<bookList.getLength(); i++){
Node book = bookList.item(i);
//获取book节点的所有属性
NamedNodeMap attrMap = book.getAttributes();
System.out.println("第"+(i+1)+"本书共有"+attrMap.getLength()+"个属性.");
//遍历book的属性
for (int j = 0; j < attrMap.getLength(); j++) {
//属性键值对
Node attrNode = attrMap.item(j);
System.out.println("属性名:"+attrNode.getNodeName());
System.out.println("属性值:"+attrNode.getNodeValue());
}
}
} 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();
}
} private static void demo1() {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("books.xml");
//通过book标签获取相应的节点
NodeList bookList = document.getElementsByTagName("book");
System.out.println("一共有"+bookList.getLength()+"本书!"); //遍历每一个book节点
for(int i=0; i<bookList.getLength(); i++){
Node book = bookList.item(i);
//获取book节点的所有属性
NamedNodeMap attrMap = book.getAttributes();
System.out.println("第"+(i+1)+"本书共有"+attrMap.getLength()+"个属性.");
//遍历book的属性
for (int j = 0; j < attrMap.getLength(); j++) {
//属性键值对
Node attrNode = attrMap.item(j);
System.out.println("属性名:"+attrNode.getNodeName());
System.out.println("属性值:"+attrNode.getNodeValue()); }
}
} 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();
} }
}

使用了两种方式。在代码中已经体现出来。
books.xml使用的是相对路径。

<?xml version="1.0"?>
<bookstore>
<book id="1">
<name>格林童话</name>
<author>轨迹<author>
<language>english</language>
<year>2016</year> </book> <book id="2">
<name>格林童话</name>
<author>轨迹<author>
<language>english</language>
<price>20</price>
</book>
</bookstore>
 

对xml文件的简单解析的更多相关文章

  1. 对xml文件的sax解析(增删改查)之一

    crud(增删改查): c:creat r:retrieve u:update d:delete 以下笔记来自于韩顺平老师的讲解. 现在是用java来操作. 第一步:新建java工程.file-new ...

  2. java代码用dom4j解析xml文件的简单操作

    时间: 2016/02/17 目标:为telenor的ALU Femto接口写一个采集xml文件并解析出locationName标签里的值,然后更新到数据库中. 从网上搜了下,有四种常用的解析xml的 ...

  3. Android中pull解析XML文件的简单使用

    首先,android中解析XML文件有三种方式,dom,sax,pull 这里先讲pull,稍候会说SAX和DOM pull是一种事件驱动的xml解析方式,不需要解析整个文档,返回的值是数值型,是推荐 ...

  4. Pugixml一种快速解析XML文件的开源解析库

    Pugixml是一个轻量级的C++ XML开源解析库,DOM形式的解析器.接口和丰富的遍历和修改操作,快速的解析,此外支持XPath1.0实现数据查询,支持unicode编码: 使用Pugixml可通 ...

  5. 对xml文件的sax解析(增删改查)之二

    先上代码: package com.saxparsetest; //the filename of this file is :saxparse.java import javax.xml.parse ...

  6. web.xml文件的简单说明

    在javaEE提供的tutorial中的hello1中的web.xml文件写到: <?xml version="1.0" encoding="UTF-8" ...

  7. 2.3 使用 dom4j 对 xml文件进行 dom 解析

    // 使用dom4j对XML文档进行解析 CRUD public class Demo1 { //读取XML文档中第二本书的书名 <书名>javaWEB</书名> @Test ...

  8. xml文件使用DOM解析,报异常org.xml.sax.SAXParseException,"characterEncoding" 的引用必须以 ';' 分隔符结尾异常

    这个异常一般为xml文件对&的报错,只需要将&改为转义后的&amp即可解决

  9. 利用freemarker生成word,word另存为xml文件的标签解析

    http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYU ...

随机推荐

  1. Nginx实现简易泛域名CDN节点

    如何使用Nginx泛域名解析+反向代理+静态资源缓存呢? 安装nginx,安装过程不再赘述,记得带上pcre.gzip.sub.status这几个模块,另外如果想开通在线清理缓存功能,需要安装ngx_ ...

  2. 浏览器本地存储(browser-storage,HTML5-localStorage > IE-UserData > Cookie)

    https://www.baidufe.com/component/browser-storage/index.html BrowserStorage是浏览器本地存储的一个解决方案,存储优先级依次为: ...

  3. HTTP2.0介绍

    HTTP2.0的所有通信都是在一个TCP连接上完成的. 1.信息传输术语 1.1 流 虚拟信道,可以承载双向消息,每个流都有一个唯一的整数标识符(1.2....N); 1.2 消息 逻辑上的HTTP消 ...

  4. 3D Math Library的姿势

    http://www.opentk.com/doc/math http://www.gamedev.net/topic/484756-fast-vector-math-library-for-net/ ...

  5. 极光推送 JPush 项目简单使用

    打开或者关闭推送 - (void)pushSwitch:(UISwitch *)sender { if (sender.on) { [[NSUserDefaults standardUserDefau ...

  6. Robot Framework--07 变量的声明、赋值及其使用

    转自:http://blog.csdn.net/tulituqi/article/details/7984642 一.变量的声明 1.变量标识符 每个变量都可以用  变量标识符{变量名}    来进行 ...

  7. php字符串常用算法--字符串加密解密

    /** * 加密.解密字符串 * * @global string $db_hash * @global array $pwServer * @param $string 待处理字符串 * @para ...

  8. springmvc 注解总结

    1.@RequestMapping@RequestMappingRequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上.用于类上,表示类中的所 ...

  9. maven jar包库

    如果你的项目不是maven项目,比如ant,你的项目需要某些jar包的时候可以到maven 的jar包中心库下载 地址:http://search.maven.org/ http://mvnrepos ...

  10. 如何更好地利用Pmd、Findbugs和CheckStyle分析结果

    这里列出了很多Java静态分析工具,每一种工具关注一个特定的能发挥自己特长的领域,我们可以列举一下: Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可能的bug— ...