问题描述
看到 Scala 的强大功能,我想知道是否可以使用内置的 Scala 语言功能和库(例如,不使用 XMLEncoder、XStream 或 JAXB)将任意对象图序列化为 XML 或从 XML 反序列化.不幸的是,我还没有找到这样的解决方案.你有什么建议?
Seeing the power of Scala, I wonder if an arbitrary object graph could be serialized and deserialized to/from XML using built-in Scala language features and libraries (e.g. without XMLEncoder, XStream or JAXB). Unfortunately, I haven't found such a solution. What could you advise?
推荐答案
我不知道是否可以使用内置的 Scala 语言功能和库将任意对象图序列化和反序列化到 XML 或从 XML 反序列化",但由于在 Scala 中有一些对 XML 的原生支持,我会提到它们.更多细节可以在Ch中找到.在 Scala 中编程中的 26 篇称为使用 XML:
I don't know "if an arbitrary object graph could be serialized and deserialized to/from XML using built-in Scala language features and libraries," but since there are some native support for XML in Scala, I'll mention them. More detail could be found in Ch. 26 of Programming in Scala called Working with XML:
本章介绍 Scala 的支持 XML.讨论后一般来说,半结构化数据,它显示了基本功能用于操作 XML 的 Scala:如何使用 XML 文字创建节点,如何将 XML 保存和加载到文件,以及如何使用查询拆分 XML 节点方法和模式匹配.
为了快速总结本章,我将引用一些要点.
To quickly summarize the chapter, I'll quote some key points.
- Scala 包含对处理 XML 的特殊支持.
- Scala 允许您在表达式有效的任何地方输入 XML 作为文字.
- 您可以使用花括号 ({}) 作为转义符,在 XML 文字中间评估 Scala 代码.
所以你可以这样写:
val foo = <a> {3 + 4} </a>
以上计算结果为 scala.xml.Elem = <a>7
.
The above evaluates to scala.xml.Elem = <a> 7 </a>
.
- 如果您想通过标签名称查找子元素,只需使用标签名称调用
\
即可. - 您可以使用
\\
而不是\
运算符进行深度搜索"并查看子元素等.
- If you want to find a sub-element by tag name, simply call
\
with the name of the tag. - You can do a "deep search" and look through sub-sub-elements, etc. by using
\\
instead of the\
operator.
这本书有一个抽象类的序列化和反序列化的例子,但它是手写的:
The book has an example of serialization and deserialization of an abstract class, but it's hand-written:
abstract class CCTherm {
val description: String
val yearMade: Int
def toXML =
<cctherm>
<description>{description}</description>
<yearMade>{yearMade}</yearMade>
</cctherm>
def fromXML(node: scala.xml.Node): CCTherm =
new CCTherm {
val description = (node \ "description").text
val yearMade = (node \ "yearMade").text.toInt
}
}
还可以在名为 scala.xml 的草稿书中找到更多信息.
Also more info could be found in a draft book called scala.xml.
这篇关于Scala XML 序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!