2016-11-16 10 views
1

scala.xmlライブラリを使用しています。私の例では、各「学生」がパラメータ「年齢」を定義しているかどうかをチェックしたいが、値が何であるかは問題ではない。 私のテストは、この場合にはfalseを返す必要があります:Scala:xmlの各ノードがパラメータを定義しているかどうか確認してください。

この1で
<student name="James" 
    age="16" 
    class="4C" 
/> 
<student name="Ellen" 
    class="4C" 
/> 

しかし真:

<student name="James" 
    age="16" 
    class="4C" 
/> 
<student name="Ellen" 
    age="15" 
/> 

私はこのような何かをしようとしたが、それは常にfalseを返す:

var res : Boolean = true 
for(node <- (xml \\ "student")) 
{ 
    if(!(node.contains("age"))) res = false 
} 
res 

私は可能性があり私の問題を解決する方法を見つけましたが、構文はあまり効率的ではありません。どう思いますか?

var res : Boolean = true 
    for(node <- (xml \\ "student")) 
    { 
     if(!(node.attribute("age").nonEmpty)) res = false 
    } 
res 
+0

「存在」と「含む」機能を使用しようとしました。しかし、私はこのようなことをしたかった:(xml \\ "student")exist(_ \ @ "type")しかし構文は完全に間違っている。私はスカラーの初心者ですが、正しい構文が得られませんでした。 – Oxydroid

+0

あなたの質問にあなたが試したコードを入れてください。あなたのやったことを教えてください。また、エラー、コンパイル、ランタイムがある場合は、質問にも追加してください。 –

答えて

-1

私にはうまくいくものが見つかりました。私はそれが最良の方法であるかどうかはわかりませんが、それは私の問題を解決してくれました。

var res : Boolean = true 
    for(node <- (xml \\ "student")) 
    { 
     if(!(node.attribute("age").isDefined)) res = false 
    } 
res 
1

より機能プログラミング指向のアプローチは、与えられた条件は、シーケンス内のすべての項目に当てはまるかどうかを確認するためにSeq種類にforall方法を利用します。

studentノードのすべてに対して属性"age"が定義されているかどうかを知りたい場合は、

val res = (xml \\ "student").forall(node => node.attribute("age").isDefined) 
関連する問題