1

所以,我正在开发一个可以接收多种类型的 XML 请求的项目。请求的类型由根标签的第一个子标签决定。所以你可以得到这样的东西:

<a>
  <b>
    foo
  </b>
</a>

或者:

<a>
  <c>
    foo 
  </c>
</a>

foo并根据 的第一个孩子<a><b>还是,对进行一定的操作<c>。我想不出任何简单的方法来确定 . 我想我可以进行重复匹配,首先检查a \ 'b'thena \ 'c'等。但是我需要处理一堆不同的请求类型,所以这会很快变得笨拙。 Elem.child没有帮助,它只返回一个元素列表:元素本身。

在事先不知道标签名称的情况下,如何获取元素的第一个子元素?

4

2 回答 2

4

我想您可以尝试以下方法:

val firstChildName = xml.child.collect{
  case el:Elem => el.label
}.headOption getOrElse ""

如果根有一个,您将获得第一个元素子标签,否则您将获得一个空字符串

于 2013-09-18T19:42:40.593 回答
1

您可以提取“_”以忽略第一个节点的名称,所以这应该有效:

val firstChild = (theXML \ "_").head //can do headOption here and map if there's a possibility of no child existing
firstChild.label match {
   case "a" => someOp(firstChild.text)
   case "b" => someOtherOp(firstChild.text)
...
}
于 2013-09-18T22:46:47.573 回答