2

我有一个 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

我如何理解这个文本?

4

1 回答 1

2

您可以使用 的child方法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)

if t.trim.nonEmpty您还可以通过向案例添加类似的内容,在与文本节点选择相同的过程中执行此过滤 。

于 2013-11-09T12:16:17.013 回答