【问题标题】:How to read from zipped xml files in Scala code?如何从 Scala 代码中的压缩 xml 文件中读取?
【发布时间】:2011-07-06 10:18:02
【问题描述】:

如何在我的 Scala 程序中直接从压缩文件访问 XML 数据文件?是否有任何直接的方法可以以编程方式解压缩和读取我的 Scala 代码中的内容?

【问题讨论】:

    标签: scala gzip scala-2.8


    【解决方案1】:

    以下是 2.8.1 中的几种方法:

    cat > root.xml << EOF
    <ROOT>
    <id>123</id>
    </ROOT>
    EOF
    zip root root.xml
    

    然后在 REPL 中:

    val rootzip = new java.util.zip.ZipFile("root.zip")
    import collection.JavaConverters._
    val entries = rootzip.entries.asScala
    entries foreach { e =>
        val x = scala.xml.XML.load(rootzip.getInputStream(e))
        println(x)
    }
    

    或类似的东西:

    val rootzip = new java.util.zip.ZipFile("root.zip")
    import scala.collection.JavaConversions._
    rootzip.entries.
      filter (_.getName.endsWith(".xml")).
      foreach { e => println(scala.xml.XML.load(rootzip.getInputStream(e))) }
    

    【讨论】:

    • 非常感谢。这个真的帮助最大。我粘贴了一个用于将 Java 枚举转换为 Scala 列表的隐式方法代码。 collection.JavaConverters._ 和 asScala() 有助于降低代码复杂性。在 scala 中读取 XML 和 ZIP 文件的许多非常有用的示例。非常感谢。
    【解决方案2】:

    【讨论】:

    • 根据 OP 的标签请求,确实支持 gzip(尽管不是 tar.gz)。
    • 我在这里看不到“tar”,只有“gzip”。 :) GZIPInputStream 应该正是医生所要求的。或者,如果它实际上是一个 PKZIP 文件,同一个包中的其他东西也可以工作(额外的帮助意外的复杂性)
    • hmmmm...有什么快速的示例代码可以看吗?我只是有点懒,就是这样。
    【解决方案3】:

    我个人更喜欢TrueZip。它允许您将归档文件视为虚拟文件系统,提供与标准 Java 文件 I/O 相同的接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多