




Scala原生XML支持简洁但已弃用:2.11及之前内置,2.12+需单独引入scala-xml依赖;支持XML字面量、XPath风格查询(\、\\)、不可变节点操作;生产环境推荐jackson-dataformat-xml等现代库。
Scala 原生支持 XML,语法简洁、集成度高,但需注意其底层机制和适用场景。Scala 2.11 及更早版本内置 XML 处理能力(基于轻量级 DOM 实现),但从 Scala 2.12 开始,XML 支持被移出标准库,需单独引入依赖。
Scala 允许直接在代码中写 XML 字面量,编译器会自动转换为 scala.xml.Node 实例:
可直接赋值、拼接、嵌入表达式(用 {...}):
注意:XML 字面量不进行语法校验,非法结构(如未闭合标签)可能在运行时才报错。
使用 \ 和 \ 操作符快速定位节点:
node \ "title" —— 获取直接子元素中所有
node \\ "author" —— 深度优先搜索所有 (含后代)node \ "@id" —— 提取属性值(返回 NodeSeq)结果是 NodeSeq,可用 text 取文本内容,headOption 安全获取首个节点。
XML 是不可变的,所有“修改”实际是创建新节点:
node.copy(child = node.child :+ 49.99 )
node % Attribute("id", Text("2"), Null)
node.child.filter(_.label == "title")
避免频繁拼接大量字符串;对复杂生成逻辑,建议用 scala.xml.PrettyPrinter 控制缩进输出。
因原生 XML 库已弃用且缺乏流式处理、命名空间、XSD 验证等能力,生产环境建议:
scala-xml 依赖)jackson-dataformat-xml 或 spray-json 的 XML 扩展javax.xml.xpa
th + scala.xml.XML.load 转为 org.w3c.dom.Document
Maven 依赖示例(Scala 2.13+):
scala-xml