使用name和value元素读取XML

时间:2018-03-16 06:06:32

标签: xml scala apache-spark

我有这样的XML:

<a>
  <b name = "d"value = "1"/>
  <b name = "e"value = "2"/>
  <b name = "f"value = "3"/>
</a>

我想获取name为e的值。如何使用scala的XML库(导入scala.xml.XML)在scala中执行此操作

我正在尝试这样的事情:

map{line=>{
  val rec = line.toString.split("\\^")
  var duration = XML.loadString(rec(4))
  ((duration\\"a"\\"b"\@"name").toString())


}}

但是输出空白

1 个答案:

答案 0 :(得分:1)

如果您使用spark,可以使用spark-xml。在Maven或Sbt

中将依赖项添加到项目中

现在您可以直接读取xml作为数据帧并执行操作

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

  val df = spark.sqlContext.read
    .format("com.databricks.spark.xml")
    .option("rowTag", "a")
      .option("valueTag", "bvalue")
    .load("/home/sk/IdeaProjects/TestProjectForDemo/src/main/scala/test.xml")


  df.withColumn("b", explode($"b")).where($"b._name" === "e")
    .show(false)

输出:

+----------+
|b         |
+----------+
|[e,2,null]|
+----------+

希望这有帮助!