java解析xml文件,会把节点属性中的换行转换成空格,怎样才能避免此类转换,即保留换行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java解析xml文件,会把节点属性中的换行转换成空格,怎样才能避免此类转换,即保留换行相关的知识,希望对你有一定的参考价值。
dom和sax都一样,默认的factory。节点属性获取
将属性值用base64编码一下,再传输,解析xml时就不会有这样的问题了,然后获得属性后解码,或者不用第三方的解析工厂类,自己单独写一个解析xml的工具类,再或者,重写dom或者sax中涉及到属性解析的部分,最简单的是base64,其他两个实现起来要麻烦些追问属性值重编码不可行,传输方式为某些国标规定的格式。
回车在dom和sax解析中不是直接视为节点了,只重写属性解析有效吗?
默认的factory设置,读取node和value
追答这文章的解析,就是DOM,但不会把回车换行变成空隔
GroovyXml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )
文章目录
一、创建 XmlParser 解析器
创建 XmlParser 解析器 , 传入 Xml 文件对应的 File 对象 ;
// 要解析的 xml 文件
def xmlFile = new File("a.xml")
// 创建 Xml 文件解析器
def xmlParser = new XmlParser().parse(xmlFile)
解析如下 xml 文件 :
<?xml version='1.0' encoding='UTF-8'?>
<student>
<name code="utf-8">Tom</name>
<age>18</age>
<team>
<member>Jerry</member>
</team>
</student>
二、获取 Xml 文件中的节点
使用
xmlParser.name
代码 , 可以获取 Xml 文件中的 <name>
节点 , <name>
节点位于根节点下, 可以直接获取 , 由于相同名称的节点可以定义多个 , 因此这里获取的 <name>
节点 是一个数组 ;
// 获取 xml 文件下的 <name> 节点
// <name> 节点位于根节点下, 可以直接获取
// 获取的 <name> 节点是一个数组
// 如果只有一个该节点, 可以直接获取第 0 个元素即可
println xmlParser.name
println xmlParser.name[0]
打印结果如下 :
[name[attributes=code=utf-8; value=[Tom]]]
name[attributes=code=utf-8; value=[Tom]]
获取多层嵌套的节点 :
// 获取 <team> 节点 下的 <member> 节点, 获取的是数组
// 也是获取第 0 个元素
println xmlParser.team[0].member[0]
三、获取 Xml 文件中的节点属性
XmlParser 获取的节点类型是 Node 类型对象 , 调用 Node 对象的 attributes() 方法 , 可获取 Xml 节点的属性 ;
// 获取 name 节点
Node nameNode = xmlParser.name[0]
// 获取 Activity 节点的属性 , 这是一个 map 集合
println nameNode.attributes()
执行结果为 :
[code:utf-8]
四、完整代码示例
完整代码示例 :
import groovy.xml.XmlNodePrinter
// 要解析的 xml 文件
def xmlFile = new File("a.xml")
// 创建 Xml 文件解析器
def xmlParser = new XmlParser().parse(xmlFile)
// 获取 xml 文件下的 <name> 节点
// <name> 节点位于根节点下, 可以直接获取
// 获取的 <name> 节点是一个数组
// 如果只有一个该节点, 可以直接获取第 0 个元素即可
println xmlParser.name
println xmlParser.name[0]
// 获取 <team> 节点 下的 <member> 节点, 获取的是数组
// 也是获取第 0 个元素
println xmlParser.team[0].member[0]
// 获取 name 节点
Node nameNode = xmlParser.name[0]
// 获取 Activity 节点的属性 , 这是一个 map 集合
println nameNode.attributes()
执行结果 :
[name[attributes=code=utf-8; value=[Tom]]]
name[attributes=code=utf-8; value=[Tom]]
member[attributes=; value=[Jerry]]
[code:utf-8]
以上是关于java解析xml文件,会把节点属性中的换行转换成空格,怎样才能避免此类转换,即保留换行的主要内容,如果未能解决你的问题,请参考以下文章