【问题标题】:Check if specific attribute present in xml file in scala?检查scala的xml文件中是否存在特定属性?
【发布时间】:2015-07-30 23:22:07
【问题描述】:

我对 scala 非常陌生,所以如果这看起来很基本,请耐心等待。 我有以下 XML 文件

<xml>
    <things/>
    <items>

        <stuff name="John"/>
        <stuff name="Jacob"/>
        <stuff name="George"/>
        <stuff name="alice"/>

    </items>    

</xml>

并且从这个文件中我想看看一个特定的名称属性是否存在于一个东西标签中。 (例如:查看 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 这样的值,它也会给我 false。

val exists= names.contains("alice")

在 REPL 中产生这个输出:

exists: Boolean = false

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

【问题讨论】:

    标签: xml scala


    【解决方案1】:

    names 的类型是 Seq[scala.xml.MetaData],您正在使用 contains 搜索 String“alice”,如您所见,这不起作用。

    要从名称属性映射每个scala.xml.MetaData 到它的文本表示,使用text 获取文本,然后您会返回一个Seq[String],它允许您搜索“alice”。

    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
    

    【讨论】:

    • 谢谢!昨天我被困了几个小时
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 2020-06-09
    • 2015-05-22
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多