Flink读取HDFS中的xml(一)——读取XML的几种方式

《Flink读取HDFS中的xml》系列记录了我在(使用Flink)处理xml文件过程中遇到的问题,以及对解决办法的探索。
本系列包含以下几个部分

  • 一、读取XML的几种方式
    xml解析的几种方式,适用场景。
  • 二、Flink XmlInputFormat读取xml
    Flink读取HDFS中的xml文件。
  • 三、读取HDFS中的xml zip压缩文件
    多个xml文件压缩后存储到HDFS,如何使用Flink读取。
  • 四、ZipXmlInputFormat的优化
    优化对zip xml文件的读取。
  1. 什么是xml

xml是一种标记语言,它使用标签存储数据,使用标签的属性对数据进行描述,使用标签之间的嵌套关系标识数据的分类(层级)关系。由于存储数据的同时也存储了大量关于数据的描述信息,其中通常有大量重复内容。这种标签嵌套标签的结构可以看成一种树形结构。

xml文档示例


    
        
            王二
            8
        
        
            张三
            10
        
    

  1. 使用DOM和SAX方式解析xml

DOM和SAX解析方式都是Java官方支持的解析方式,不同之处在于:

  • DOM将整个xml文档加载到内存中,建立一个与之对应的型数据结构,方便随机读取和修改,但是当文档较大时占用内存交大。

  • SAX将xml作为文本顺序读取,在标签开始和结束时通过回调方法触发解析程序和解析终止程序,由于不需要将整个文本加载到内存,可以做到边读取边解析,适合于大文件的读取,也可以有选择的读取指定标签。

DOM方式主要方法的调用可以参看文末的参考链接,这里主要记录SAX方式的读取流程:

SAX方式解析XML的精髓在于org.xml.sax.helpers.DefaultHandler中的几个方法重写:

  • startDocument:读取到文档开始,可以做一些初始化工作
  • startElement:读取每个标签的开始,可以获取标签的属性,过滤标签
  • characters:读取标签开始和结束之间的内容(text的内容)
  • endElement:读取到每个标签的结束,可以根据标签名称,对text进行解析、记录
  • endDocument:读取到文档末尾,可以做一些清理工作
    上述的5个方法的顺序,也是整个文档解析的顺序,重复2到3步完成整个文档解析。

参考链接:
Java文件操作①——XML文件的读取

你可能感兴趣的:(Flink读取HDFS中的xml(一)——读取XML的几种方式)