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

智能推荐

java计算机毕业设计(附源码)防疫物品售卖系统(springboot+mysql+maven+论文)-程序员宅基地

文章浏览阅读332次,点赞4次,收藏6次。其次,防疫物品售卖系统的建立有助于政府和卫生组织更好地监控防疫物品的流通情况。通过对售卖系统的数据进行分析,可以了解到各地区防疫物品的需求情况,从而有针对性地进行调配和补充。它不仅能够满足人们在疫情期间对防疫物品的需求,降低感染风险,还能帮助政府和卫生组织更好地监控防疫物品的流通情况,为打赢疫情防控阻击战提供有力支持。后端由Spring Boot提供支持,前端由Vue.js构建,数据存储和管理通过MySQL和Navicat实现,整个开发流程由Maven进行管理,并在Tomcat服务器上运行。

TimePicker DatePicker使用及6.0以下监听事件设置_datepicker可以通过setondatechangedlistener()设定日期监听器吗-程序员宅基地

文章浏览阅读3.5k次。运行截图public void showPickerDialog(){ AlertDialog.Builder builder=new AlertDialog.Builder(AddBallActivity.this); View view= LayoutInflater.from(AddBallActivity.this).inflate( _datepicker可以通过setondatechangedlistener()设定日期监听器吗

数组中的逆序对-------归并排序应用_22212 14647 27252 22772-程序员宅基地

文章浏览阅读2.1k次。题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size&amp;lt;=10^4对于%75的数据,size&amp;lt;=10^5对于%100的数..._22212 14647 27252 22772

软件技术连载(前言)_软件技术前言-程序员宅基地

文章浏览阅读829次。软件技术连载(前言)PowerBuilder的魅力(前言) 作者:轻风 个人主页:http://gentlebreeze.home4u.china.com今天,大多数应用类型的程序员也许都在讨论这么一个话题:是Java还是.NET。我们似乎面对了这么一道二选一的选择题。当提出某个项目问题也许Java不合适,马上就会接着讨论.NET会怎么样。然而回顾计算机语言的发展历史,我们发现,从来没_软件技术前言

英飞凌TC3xx--深度手撕HSM安全启动(一)--安全启动方式_tc3xx boot rom-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏20次。汽车MCU的信息安全在最近几年是越来越火,而信息安全最重要的一个功能就是系统的安全启动;从嵌入式角度出发,安全启动最早应用在linux系统上,全称叫secure boot;它是一种逐级验证镜像,从而实现固件可信运行。以常见的uboot启动为例,通常要经过BootRom -> SPL -> uboot三个大阶段(其中BootRom出厂时掩膜在ROM介质中,不可更改,SPL(Secondaty Program Loader)用于初始化C语言环境等);_tc3xx boot rom

ethercat 主站 FPGA verilog 代码 一份基于FPGA的EtherCAT主站的Verilog代码实现_fpga ethercat-程序员宅基地

文章浏览阅读634次。同时,为了提高数据处理的效率,我们采用了多路DMA技术,在数据传输过程中,通过多条DMA通道同时传输数据,减少了数据传输的等待时间。为了满足高性能和高可靠性的需求,许多主站的实现采用了FPGA技术。同时,我们还实现了从站配置信息的读取和设置功能,可以通过主站对从站进行灵活的配置,以适应不同场景下的需求。通过参数设置端口,依次将各个伺服设置成模式6,再依次发送控制字31,再依次去读取状态字,如果读到某个轴的状态字是回零完成,就将该轴的控制字写回15,并然后通过参数设置接口将其模式设置为8。_fpga ethercat

随便推点

大数据案例分析-程序员宅基地

文章浏览阅读2.3k次。摘自https://www.cnblogs.com/ShaYeBlog/p/5872113.html一、大数据分析在商业上的应用1、体育赛事预测世界杯期间,谷歌、百度、微软和高盛等公司都推出了比赛结果预测平台。百度预测结果最为亮眼,预测全程64场比赛,准确率为67%,进入淘汰赛后准确率为94%。现在互联网公司取代章鱼保罗试水赛事预测也意味着未来的体育赛事会被大数据预测所掌控。..._大数据分析与应用 案例分析题

webstorm 扩大内存_webstorm设置内存-程序员宅基地

文章浏览阅读1.1k次。个人感知-----vs/ws对于vscode 总是很多东西操作不熟练 还是喜欢用wenstorm ,可视化能力简直不要太好!!!但是不得不承认ws真的巨慢巨卡,尤其是公司电脑配置不高的情况下 更是恼火5分钟改个bug 提代码用了半小时。面对测试及其他人的冷眼斜视,我很无奈!!!更改一下内存设置,默认值为2M多一点 ,也是太慢好不好!所以玩命加!!!只能说还有是有点点效果的 操作切换分支时没有那么卡 持续找解决办法。。。。。..._webstorm设置内存

基于HAL库的STM32单定时器多路输入捕获测量PWM的频率和占空比实现(状态机方式实现)_stm32 hal定时器输入捕获-程序员宅基地

文章浏览阅读5.1k次,点赞11次,收藏66次。先有了这篇文章实现了单定时器的多通道测量频率,以外部时钟的方式可测量任意频率的方波),奈何不能多路测试PWM波的频率,于是有了本文。_stm32 hal定时器输入捕获

时域卷积定理及频域卷积定理-程序员宅基地

文章浏览阅读2.8w次,点赞18次,收藏84次。时域卷积定理和频域卷积定理及证明_频域卷积定理

scrapy_redis获取英雄联盟比赛数据,使用先详情页再列表页的深度优先方式-程序员宅基地

文章浏览阅读385次。1、面试了两次,很多面试官非常的纠结爬虫任务调度,如果回答说没有使用框架,那面试官就非常怀疑认为是在吹牛了,scrapy的强大在于任务调度,没有scrapy爬虫任务怎么调度?线程数量怎么控制,优先调度什么任务,没有scrapy时候怎么做?scrapy并非适合一切场景。反正见过有的笨瓜面试官,觉得任务调度一定你要用scrapy,介绍项目没用到scrapy就是吹牛造假。 先弄一个lol比赛数据..._scrapy-redis 列表页

QCM2290 充电指示灯 —— CHG_LED_SINK_qcm2290 charging-程序员宅基地

文章浏览阅读458次。简述在QCM2290 平台使用了PM4125,该PMIC上有两种方式支持充电指示灯:1.CHG_LED_SINK,平台没有添加此代码,需要自己根据寄存器添加驱动代码。2.GREEN and RED,平台默认集成此代码,无需调试。CHG_LED_SINK——充电指示灯调试..._qcm2290 charging

推荐文章

热门文章

相关标签