代码之家  ›  专栏  ›  技术社区  ›  Cassie

从RSS提要Scala中提取的记录太多

  •  1
  • Cassie  · 技术社区  · 6 年前

    我需要从XML中提取一些数据并将其写入数据库。我已为此创建了记录实体:

    case class Record (title: String, description: String)
    

    我想写标题和描述来记录实体。如果我有大约12条XML记录,我希望输出12条记录。然而,我得到了12*12条记录的输出,这意味着每条记录打印12次。原因可能是什么?

    主要方法如下:

    def main(args: Array[String]): Unit = {
        val response: HttpResponse[String] = Http("link")
          .timeout(connTimeoutMs = 2000, readTimeoutMs = 5000)
          .asString
        val xmlString = response.body
        val xml = XML.loadString(xmlString)
        val titleNodes = (xml \\ "item" \ "title")
        val descriptionNodes = (xml \\ "item" \ "description")
    
        val output: Seq[Record] = for{
          title <- titleNodes
          description <- descriptionNodes
        }yield Record(title.text, description.text)
        output.foreach(println)
    }
    

    我最近才开始使用Scala编写代码,所以如果您有任何建议,我将不胜感激!

    1 回复  |  直到 6 年前
        1
  •  2
  •   g.krastev    6 年前

    假设有12个项目,每个项目都有一个标题和一个描述,这意味着有12^2对可能的标题和描述,这就是您的代码正在计算的内容。如果您只需要每个项目的标题和描述,那么您的外部循环应该在项目上:

    for {
      item <- xml \\ "item"
      title <- item \ "title"
      description <- item \ "description"
    } yield Record(title.text, description.text)