如何判断XML节点下面是否只有一个文本节点?

时间:2013-02-26 10:07:36

标签: scala

我正在处理一个函数,目标是在文本节点是元素的唯一子节点时返回文本节点的文本。例如:

<root>1</root> => 1

<root><node>1</node></root> => null

显然,Scala不区分仅包含文本的节点和包含元素的Node。

那我怎么知道一个元素(或者一般来说,一个Node)下面只有一个文本节点呢?

2 个答案:

答案 0 :(得分:2)

TextElem都是XML节点,因此可以通过isInstanceOf来识别节点类型,例如:

import scala.xml.{Text, Node}
def hasOnlyTextChild(node:Node) = node.child.size == 1 && node.child(0).isInstanceOf[Text]

答案 1 :(得分:2)

你可以使用模式匹配的力量:

import xml.{Text, Elem, Node}

def extractText(n: Node): String = n match {
    case Elem(_, _, _, _, Seq(Text(t))) => t
    case _ => null
}

println(extractText(<root>1</root>))
println(extractText(<root><node>1</node></root>))

但更多的scala-way是返回Option[String]而不是String/null

def extractText(n: Node): Option[String] = n match {
    case Elem(_, _, _, _, Seq(Text(t))) => Some(t)
    case _ => None
}