问题如下,想象一个没有任何特定模式的 XML
<persons>
<total>2</total>
<someguy>
<firstname>john</firstname>
<name>Snow</name>
</someguy>
<otherperson>
<sex>female</sex>
</otherperson>
</persons>
对于处理,我想在键值映射中使用它:
"Persons/total" -> 2
"Persons/someguy/firstname" -> john
"Persons/someguy/name" -> Snow
"Persons/otherperson/sex" -> female
最好我有一些很好的递归函数,我首先遍历 XML 代码并简单地堆叠所有标签,直到找到一个值并将该值与标签堆栈一起返回。不幸的是,当我返回输入序列时,我正在努力将返回类型与输入类型连接起来。让我向您展示我到目前为止所拥有的,显然 foreach 是一个问题,因为它返回 Unit,但地图也不会工作,因为它返回一个 Seq。
def dfs(n: NodeSeq, keyStack: String, map: Map[String,String])
:(NodeSeq, String, Map[String,String]) = {
n.foreach(x => {
if (x.child.isEmpty) {
dfs(x.child, keyStack, map + (keyStack+ x.label + " " -> x.text))
}
else {
dfs(x.child, keyStack+ x.label + "/", map)
}
}
)
}
非常感谢您的帮助!