Scala 解析 XML

简介: 在使用Spark时,有时候主函数入口参数过多的时候,会特别复杂,这个时候我们可以将相应的参数写在xml文件中,然后只要将xml文件的路径传进去即可,这里的xml路径可以是本地的,也可以是hdfs上的。


公众号二维码
打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处:https://yq.aliyun.com/u/thinkgamer
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer

在使用Spark时,有时候主函数入口参数过多的时候,会特别复杂,这个时候我们可以将相应的参数写在xml文件中,然后只要将xml文件的路径传进去即可,这里的xml路径可以是本地的,也可以是hdfs上的。

scala提供了类似于Xpath的语法来解析xml文件,其中很重要的两个操作符是""
和 "\"

  • :根据搜索条件得到下一个节点
  • \ :根据条件获取所有的节点
<configure>
    <input>
        <name>app_feature_goods</name>
        <hdfs>/user/path/to/goods</hdfs>
    </input>
    <input>
        <name>app_feature_user</name>
        <hdfs>/user/path/to/user</hdfs>
    </input>
</configure>
val input = args(0)
val xml = XML.load(input)


// 找到所有的一级节点 input
val input_list = xml\"input"
input_list.foreach(println)

// 遍历每个一级节点,得到具体的值
for(one <- input_list){
    println(one\"name")
    println((one\"name").text)
    println(one\"hdfs")
    println((one\"hdfs").text)
}

// 得到所有的name
val name_list = xml\\"name"
name_list.map(one => one.text).foreach(println)

// 获取所有hdfs
val hdfs_list = xml\\"hdfs"
hdfs_list.map(one => one.text).foreach(println)

// 获取具有class的值
println(xml\"input"\"name"\\"@class")

// 打印出具有class属性的name值和hdfs值
println((xml\\"name").filter(_.attribute("class").exists(_.text.equals("test"))).text)
println((xml\\"hdfs").filter(_.attribute("class").exists(_.text.equals("test"))).text)

打印出的信息为:

<input>
        <name>app_feature_goods</name>
        <hdfs>/user/path/to/goods</hdfs>
    </input>
<input>
        <name>app_feature_user</name>
        <hdfs>/user/path/to/user</hdfs>
    </input>
<input>
        <name class="test">app_feature_user_test</name>
        <hdfs class="test">/user/path/to/user_test</hdfs>
    </input>
-------------
<name>app_feature_goods</name>
app_feature_goods
<hdfs>/user/path/to/goods</hdfs>
/user/path/to/goods
<name>app_feature_user</name>
app_feature_user
<hdfs>/user/path/to/user</hdfs>
/user/path/to/user
<name class="test">app_feature_user_test</name>
app_feature_user_test
<hdfs class="test">/user/path/to/user_test</hdfs>
/user/path/to/user_test
-------------
app_feature_goods
app_feature_user
app_feature_user_test
-------------
/user/path/to/goods
/user/path/to/user
/user/path/to/user_test
-------------
test
-------------
app_feature_user_test
/user/path/to/user_test
-------------

Process finished with exit code 0
相关文章
|
28天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
2月前
|
XML 前端开发 数据格式
请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
【2月更文挑战第22天】【2月更文挑战第67篇】请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
|
10天前
|
XML 存储 数据格式
探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
DTD(文档类型定义)用于定义XML文档的结构和合法元素、属性。它允许不同团体就数据交换标准达成一致,并用于验证XML数据的有效性。DTD可通过内部声明(在XML文档内)或外部声明(在单独文件中)来定义。内部声明示例显示了如何定义`note`元素及其子元素的结构,而外部声明则引用外部DTD文件。元素、属性、实体和PCDATA/CDATA是XML构建模块。DTD中,元素通过ELEMENT声明定义,属性通过ATTLIST声明定义,实体声明提供特殊字符或外部资源的快捷方式。
13 0
|
14天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
14 0
|
17天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
22 1
|
2月前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
11 0
|
2月前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
72 0
|
XML Scala 数据格式
scala 简要: xml处理
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
923 0
|
SQL 消息中间件 分布式计算
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
676 0
如何查看spark与hadoop、kafka、Scala、flume、hive等兼容版本【适用于任何版本】
|
3月前
|
分布式计算 Java Scala
spark 与 scala 的对应版本查看、在idea中maven版本不要选择17,弄了好久,换成11就可以啦
spark 与 scala 的对应版本查看、.在idea中maven版本不要选择17,弄了好久,换成11就可以啦
112 2

推荐镜像

更多