检查scala中xml文件中是否存在特定属性?

时间:2015-07-30 23:22:08

标签: xml scala

我对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

如何测试此文件中是否包含值?

1 个答案:

答案 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