dom4j读取xml文档_获取xml行数-程序员宅基地

技术标签: exception  文档  java  string  xml  encoding  javascript  

//book.xml
<?xml version="1.0" encoding="UTF-8"?>
<书架> 
  <书> 
    <书名 name="jack">Java就业培训教程</书名>  
    <作者>张孝祥</作者>  
    <售价>49.00元</售价>  
    <售价>34元</售价>
  </书>  
  <书> 
    <书名>JavaScript网页开发</书名>  
    <作者>张孝祥</作者>  
    <售价>28.00元</售价> 
  </书> 
</书架>

package com.dom4j;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
import org.xml.sax.DocumentHandler;

public class Demo1 {
	
    //获取指定标签的值。
	@Test
	public void read() throws Exception{
		SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book.xml"));
        Element  root = document.getRootElement();
        Element book = (Element) root.elements().get(1);
        String value = book.element("书名").getText();
        System.out.println(value);
	}
	
	//获取指定标签的属性值。
	@Test
	public void readAtt() throws Exception{
		SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book.xml"));
        Element  root = document.getRootElement();
        Element book = (Element) root.elements().get(0);
//        String value = book.element("书名").attribute("name").getValue();
        String value = book.element("书名").attributeValue("name");
        System.out.println(value);
	}
	
	//往xml文档中写数据以及出现的乱码问题。
	@Test
	public void add() throws Exception{
		SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book.xml"));
        
        Element  book = (Element) document.getRootElement().element("书");
        book.addElement("售价").setText("34元");
        
        /*
        XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"));
            writer.write( document );
            writer.close();
		*/
        //用字节流 
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
        writer.write( document );
        writer.close();
	}
}

用dom4j操作xml文档时,要巧用手上的API。每当需要用到一门第三方的技术时,可以先简略看下它的API,看看它的快速入门。

当出现乱码时,可能是编码出现了错误,譬如xml文档中指定的是gb2312,而在用dom4j读取时用的是UTF-8的码表,所以会出现乱码。

用dom4j操作xml文档解决乱码的诀窍:

1.设置一个格式输出器(漂亮格式的或者是紧凑格式的),设置它的编码方式与xml文档的编码方式一致。

       format.setEncoding("UTF-8");

2.用字节流输出,它采用的是设置的编码方式

       XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Myway890806/article/details/6596380

智能推荐

交叉编译 Qt5.12.2_qt5.12 arm 交叉编译-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏59次。来自QQ群 Linux && 技术分享 311078264打开链接加入QQ群:https://jq.qq.com/?_wv=1027&k=5Gr3bAx此文档由elikang整理,为了文章简单直接,许多细节未能在文章中体现,如有疑问请进群讨论。参考文章:https://doc.qt.io/qt-5/linux.html交叉编译工作在Ubuntu18.04上进行,..._qt5.12 arm 交叉编译

/deep/ 深度作用选择器作用及使用_/deep/ span-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏6次。之前在开发中遇到一个问题,vue项目结合 element ui 使用。但是 element ui 的样式不一定符合我们的需求,这时我们就需要改变它的样式。比如博主使用到了element ui 的对话框,我想要改变这个对话框标题的颜色,所以我需要在页面中审查元素找到对应的标签。但是当我找到并且复制,然后试图去改变它的样式时,怎么都没办法改变。我以为是权重的问题,所以我加 ! important,但是也毫无作用。当我审查元素发现此样式就没有作用到,就相当于它没有找到这个元素,所以也就不存在改_/deep/ span

MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]_lambdaquery() 无法缓存实体类-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏3次。项目有用到mybatis-plus还是挺香的,但是遇到一个坑com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this property [dbName] of entity []意思是实体类enetity及其字段没有缓存或者说指定字段没有缓存这个需要具体问题具体分析,得先找到在哪缓存的?什么时候缓存的?问题和解决方案我这里的问题是因为继承太多正常是一个mapp_lambdaquery() 无法缓存实体类

FP-growth_fp-growth工作流程-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏6次。FP-growthFP-growth 算法能够更有效地挖掘数据,但不能用于发现关联规则。FP-growth 基于 Apriori 算法构建,但在完成相同任务时采用了一些不同的技术。Apriori:在每次循环的连接步中都要扫描数据集,来计算当前组合而成的项集的支持度。FP-growth:只需要对数据库进行两次扫描,并将数据集存储在一个特定的称作 FP 树的数据结构。这种做法能够使得算法的执..._fp-growth工作流程

中国食品安全检测市场专项调研及投资前景预测报告2022-2027年_2023-2027年中国食品安全检测行业全景调研与发展战略研究咨询报告-程序员宅基地

文章浏览阅读248次。中国食品安全检测市场专项调研及投资前景预测报告2022-2027年【报告编号】: 412907 【出版时间】: 2022年1月 【出版单位】: 中商经济研究网第1章:中国食品安全检测行业发展综述及投资要点 261.1 食品制造行业地位分析 261.1.1 食品制造行业发展地位 261.1.2 食品制造行业发展规模 27(1)食品制造企业数量 27(2)食品制造行业规模 27(3)食品行业进出口情况 281.2 食品安全现状分析 291.2.1 食品安全概述 29(1)食..._2023-2027年中国食品安全检测行业全景调研与发展战略研究咨询报告

oracle更改服务端字符集-程序员宅基地

文章浏览阅读1.7k次。oracle数据库的字符集更改 A、oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为server端字符集 NLS_LANGUAGE 为 server端字符显示形式 B、查询oracle client端的字符集 $echo $NLS_L_oracle更改服务端字符集

随便推点

C#多维数组的维数长度求解_多维数组长度 c#-程序员宅基地

文章浏览阅读2.4k次。C#多维数组的维数长度求解string[,] datalst = new string[,] { { “11”, “12”, “13” }, { “21”, “22”, “23” } };int row = datalst.GetLength(1); //第一维的长度(即行数)int col = datalst.GetLength(0); //第二维的长度(即列数)Console.Wri..._多维数组长度 c#

C# System.Threading.Timer如何停止_system.timers.timer如何停止-程序员宅基地

文章浏览阅读6.7k次。Threading.Timer 属于100% 多线程Timers.Timer 默认多线程,可设置为单线程既然是多线程,不管通过回调 还是事件 执行任务,都是开启的另一个线程;你可以暂停或销毁计时器(Timer)本身,但是不能操作里面新开线程的任务,这也是多线程设计的期望方式,因为你不知道 超线程里面到底执行到哪儿了。但是,像我这种(刁民)有时候就喜欢那么横,所以就把 新开的任务装在一个 n..._system.timers.timer如何停止

爬取汽车之家所有汽车参数配置_汽车之家参数配置怎么导出-程序员宅基地

文章浏览阅读5.1k次,点赞3次,收藏18次。效果预览汽车之家参数配置的页面无法右键查看网页源代码,不太好爬取,网上相关教程方法比较复杂,这里采用了两步走的爬取方法。即先获取所有车型的网页,再分别解析,逐步拆解。代码实现第一步,导入相关库import bs4import requests as reqimport reimport jsonimport csv第二步,下载出所有车型的网页def mainMethod(): li = [chr(i) for i in range(ord("A"), ord("Z") _汽车之家参数配置怎么导出

​【原创】基于SSM的学院排课管理系统(排课管理系统毕业设计源代码)_培训机构 排课系统 源码-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏20次。后端采用SSM框架。前端使用的是Layui的一个网站模板。通过3种角色使用,实现了包括了教师、学生、班级、专业、课程、排课、数据统计等多个不同的模块。本系统的排课逻辑是为不同学院下不同班级的每一天课程进行安排,并不是传统的固定课程形式。每一天的课程可以是不同的。_培训机构 排课系统 源码

vue-amap中使用官方轨迹回放功能_vue-amap passedpolyline-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏7次。// vue-amap中使用官方轨迹回放功能<template> <div class="page"> <div>MAP TRACK</div> <div class="map-container"> <el-amap :center="center" :amap-manager="amapManager" _vue-amap passedpolyline

国内设置maven仓库地址(阿里的)-程序员宅基地

文章浏览阅读176次。国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用。最新更新:2016年11月11日 18:05:40 阿里云提供Maven私服,我把配置文件贴一下,自己放在maven的conf下就行,setting.xmlhttps://github.com/ae6623/Zebra/blob/master/maven-repo-setting..._zebra maven地址

推荐文章

热门文章

相关标签