Dom4j带换行符属性值读取后变成空格的解决办法

本文详细介绍了使用Dom4j解决在读取XML文件时换行符丢失的问题,通过添加XML根节点属性、自定义XMLWriter和调整输出格式,确保换行符正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度一圈没找到,还是在StackFlow上找到了答案。

问题描述:Dom4j写入带换行符的属性值时,可以看到生成的XML里是换行的,但是用dom4j读取回来后换行符变成了空格。

解决办法:

1,在XML根节点添加属性

xml:space="preserve"

对应的dom4j代码是:

document.getRootElement().addAttribute(QName.get("space", Namespace.XML_NAMESPACE),
            "preserve");

2,需要手动写一个XMLWriter,继承自Dom4j的XMLWriter,重写里面的escapeAttributeEntities方法。


//转义换行符
	private static class XmlWriterWithLine extends XMLWriter{
		
		public XmlWriterWithLine(OutputStream out, OutputFormat format)
				throws UnsupportedEncodingException {
			super(out, format);
		}

		@Override
		protected String escapeAttributeEntities(String text) {
			//博客没人气,我已删除此段代码,请各位攻城狮自行研究或留邮箱
		}
	}


3,最后输出xml

ByteArrayOutputStream baos = new ByteArrayOutputStream();
        	OutputFormat format = OutputFormat.createPrettyPrint();
        	format.setIndentSize(4);
        	format.setNewlines(true);
        	format.setTrimText(true);
        	format.setPadText(true);
			XMLWriter xw = new XmlWriterWithLine(baos, format);
			xw.write(document);
			xw.close();
			System.out.println(baos.toString("utf-8"));


输出后的换行符变成了
用dom4j读入后直接就是换行符了

上面代码里没有处理\r的情况,读者可以自己查看XmlWriter的源代码

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值