Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中,如何在没有子节点文本的情况下获取XML节点的文本?_Scala_Xml Parsing - Fatal编程技术网

在Scala中,如何在没有子节点文本的情况下获取XML节点的文本?

在Scala中,如何在没有子节点文本的情况下获取XML节点的文本?,scala,xml-parsing,Scala,Xml Parsing,我有一个XML文件,其中我有一个特定的节点,它总是有文本,也可能有一个子节点。在Scala中读取后,Node元素可以类似于: val nodeWithChild = <cell colorbg="16777215"> independent <grid> <row> <cell colorbg="16777215">

我有一个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>
去掉空白是没有问题的。但问题是,在第一种情况下,我不希望在结果中只使用
这个词。我只想要一个独立的结果


我如何理解这篇课文

您可以使用
Elem
child
方法获取其子节点(而不是其其余子节点),然后
收集
(或
过滤器
,或
平面图
等)仅选择文本节点:

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> texts.map(_.trim).filterNot(_.isEmpty)
res3: Seq[String] = ArrayBuffer(independent)