我有一个 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
"
去掉空格是没有问题的。但问题是,在第一种情况下,我不希望结果中出现“独占”一词。我只想要一个读取独立
的结果。
我怎样才能看到这段文字?
最佳答案
您可以使用 Elem
的 child
方法获取其子级(而不是其其余后代),然后 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)
您还可以通过在案例中添加诸如 if t.trim.nonEmpty
之类的内容,在与文本节点选择相同的过程中执行此过滤。
关于scala - 在 Scala 中,如何获取 XML 节点的文本而不获取其子节点的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19875569/