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

时间:2013-11-09 11:49:30

标签: scala xml-parsing

我有一个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的结果。

我如何获得此文字?

1 个答案:

答案 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) 等内容来进行此过滤。