我对scala非常陌生,所以如果这看起来很基本的话请耐心等待。 我有以下XML文件
<xml>
<things/>
<items>
<stuff name="John"/>
<stuff name="Jacob"/>
<stuff name="George"/>
<stuff name="alice"/>
</items>
</xml>
从这个文件中我想看看stuff标签中是否存在特定的name属性。 (例如:看看Jacob是否存在或者看看Lisa是否存在于xml文件中)
到目前为止,我有以下代码
import scala.xml._
val xml = XML.loadFile("sample.xml")
val stuff = (xml \\ "stuff")
//The following val contains: scala.collection.immutable.Seq[scala.xml.MetaData] = List( name="John", name="Jacob", name="George", name="alice")
val names= stuff.map(_.attributes)
现在我注意到这会创建一个List但是当我在val名称上使用contains方法时,即使像alice这样的值,它也会给我错误。
val exists= names.contains("alice")
在REPL中生成此输出:
exists: Boolean = false
如何测试此文件中是否包含值?
答案 0 :(得分:2)
names
的类型为Seq[scala.xml.MetaData]
,您使用包含搜索String
&#34; alice&#34;你可以看到它不会起作用。
要从名称属性中获取文本,请将每个scala.xml.MetaData
映射到text
的文本表示,然后返回Seq[String]
,以便您搜索&# 34;艾丽斯&#34;
scala> val names = (xml \\ "items" \\ "stuff" \\ "@name").map(_.text)
names: scala.collection.immutable.Seq[String] = List(John, Jacob, George, alice)
scala> names.contains("alice")
res22: Boolean = true