Scala原生XML支持简洁但已弃用:2.11及之前内置,2.12+需单独引入scala-xml依赖;支持XML字面量、XPath风格查询(\、\\)、不可变节点操作;生产环境推荐jackson-dataformat-xml等现代库。

Scala 原生支持 XML,语法简洁、集成度高,但需注意其底层机制和适用场景。Scala 2.11 及更早版本内置 XML 处理能力(基于轻量级 DOM 实现),但从 Scala 2.12 开始,XML 支持被移出标准库,需单独引入依赖。
XML 字面量与基本解析
Scala 允许直接在代码中写 XML 字面量,编译器会自动转换为 scala.xml.Node 实例:
可直接赋值、拼接、嵌入表达式(用 {...}):
注意:XML 字面量不进行语法校验,非法结构(如未闭合标签)可能在运行时才报错。
查询与提取数据(XPath 风格)
使用 \ 和 \ 操作符快速定位节点:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
-
node \ "title"—— 获取直接子元素中所有 -
node \\ "author"—— 深度优先搜索所有(含后代) -
node \ "@id"—— 提取属性值(返回NodeSeq)
结果是 NodeSeq,可用 text 取文本内容,headOption 安全获取首个节点。
构建与修改 XML
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依赖) - 处理大型/标准 XML:接入
jackson-dataformat-xml或spray-json的 XML 扩展 - 需要 XPath/XSLT:用
javax.xml.xpath+scala.xml.XML.load转为org.w3c.dom.Document
Maven 依赖示例(Scala 2.13+):









