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 に答える