我有一个XML文件,我有一个特定的节点,它总是有文本,也可能有一个孩子。在Scala中读取它之后,Node元素可能看起来像其中之一:
val nodeWithChild = <cell colorbg="16777215">
independent
<grid>
<row>
<cell colorbg="16777215">
exclusively
</cell>
</row>
</grid>
</cell>
val nodeWithoutChild = <cell colorbg="16777215">
dependent
</cell>
现在我想获取父节点的文本。我期望text
方法给我。
scala> nodeWithChild.text
res0: String =
"
independent
exclusively
"
scala> nodeWithoutChild.text
res1: String =
"
dependent
"
摆脱空白是没有问题的。但问题是,在第一种情况下,我不想在我的结果中使用exclusively
这个词。我只想要一个读取independent
的结果。
我如何获得此文字?
答案 0 :(得分:2)
您可以使用child
的{{1}}方法获取其子级(而不是其后代的子级),然后使用Elem
(或collect
,或者filter
等)仅选择文本节点:
flatMap
如果你想忽略空格:
scala> val texts = nodeWithChild.child.collect { case Text(t) => t }
texts: Seq[String] =
ArrayBuffer("
independent
", "
")
您也可以在与文本节点选择相同的过程中通过向案例添加scala> texts.map(_.trim).filterNot(_.isEmpty)
res3: Seq[String] = ArrayBuffer(independent)
等内容来进行此过滤。