解析XML文件有两种方法,一种是用DOM技术,一种是用SAX技术,DOM是把整个XML文件读入内存然后进行分析,而SAX则不是,对于楼主这样巨型的XML文件,建议使用SAX技术。相关的资料网上很多,虽然DOM是微软提出的,但是SAX在JAVA社区已经成了事实上的标准。--------------------------
让生命时刻充满着激情!

解决方案 »

  1.   

    SAX 处理是如何工作的
    SAX 分析经过其的 XML 流,这非常象老式的自动收报机纸条。考虑以下 XML 代码片断:<?xml version="1.0"?>
    <samples>
       <server>UNIX</server>
       <monitor>color</monitor>
    </samples>一般情况下,SAX 处理器分析这段代码将生成以下事件:Start document
    Start element (samples)
    Characters (white space)
    Start element (server)
    Characters (UNIX)
    End element (server)
    Characters (white space)
    Start element (monitor)
    Characters (color)
    End element (monitor)
    Characters (white space)
    End element (samples)SAX API 允许开发者捕获这些事件,并对它们进行操作。
    SAX 处理涉及以下几步:
    · 创建事件处理程序。 
    · 创建 SAX 解析器。 
    · 将事件处理程序分配给解析器。 
    · 对文档进行解析,将每个事件发送给处理程序。 
    基于事件处理的利弊
    这种处理的好处非常象流介质的好处;可以立即开始分析,而不是必须等待所有要处理的数据。同样,由于应用程序简单地检查经过其的数据,所以不需要将数据存储在内存里。当遇到大文档时,这是一个突出的优势。一般来讲,SAX 还比其替代物"文档对象模型"快。
    另一方面,由于应用程序不以任何方式存储数据,所以,使用 SAX 时,不可能对数据进行更改,或者"返回"至数据流中前面的数据。
    DOM 和基于树的处理
    "文档对象模型"或 DOM 是处理 XML 数据的"传统"方法。使用 DOM 时,数据以类树结构被装入内存中。
    例如,在上一屏中作为示例所使用的同一文档将被表示为节点,如左边所示。
    矩形框表示元素节点,椭圆形表示文本节点。
    DOM 使用根节点和父子关系。例如,在本例中,samples 将是带有五个子节点的根节点:三个文本节点(空白)和两个元素节点 server 和 monitor。
    要认识到一件重要的事情,实际上,server 和 monitor 有 null 值。相反,它们有子文本节点 UNIX 和 color。
     
    基于树处理的利弊
    DOM 和通过扩展基于树的处理有几项好处。首先,由于树在内存中是持久的,可以修改它,所以应用程序可以更改数据和结构。也可以在任何时候遍历树,这与 SAX 的"一次性处理"不一样。还可以更简单地使用 DOM。
    另一方面,在内存中构建这些树需要大量的开销。处理一些大文件时通常会完全超出系统能力。此外,创建 DOM 树是一个非常缓慢的过程。在 SAX 与 DOM 之间,如何选择
    选择 DOM 还是 SAX,这取决于几个因素:
    · 应用程序的目的:如果必须对数据进行更改,并且作为 XML 将它输出,则在大多数情况下,使用 DOM。与使用 XSL 转换来完成的简单结构更改不一样,如果是对数据本身进行更改,则尤其应该使用 DOM。 
    · 数据的数量:对于大文件,SAX 是更好的选择。 
    · 将如何使用数据:如果实际上只使用一小部分数据,则使用 SAX 将数据抽取到应用程序中,这种方法更好些。另一方面,如果知道将需要向后引用已经处理过的信息,则 SAX 可能不是正确的选择。 
    · 需要速度:通常,SAX 实现比 DOM 实现快。 
    记住 SAX 和 DOM 不是互斥的,这一点很重要。可以使用 DOM 来创建事件的 SAX 流,可以使用 SAX 来创建 DOM 树。事实上,大多数解析器实际常常使用 SAX 来创建 DOM 树!
    --------------------------
    让生命时刻充满着激情!
      

  2.   

    SAX 处理是如何工作的
    SAX 分析经过其的 XML 流,这非常象老式的自动收报机纸条。考虑以下 XML 代码片断:<?xml version="1.0"?>
    <samples>
       <server>UNIX</server>
       <monitor>color</monitor>
    </samples>一般情况下,SAX 处理器分析这段代码将生成以下事件:Start document
    Start element (samples)
    Characters (white space)
    Start element (server)
    Characters (UNIX)
    End element (server)
    Characters (white space)
    Start element (monitor)
    Characters (color)
    End element (monitor)
    Characters (white space)
    End element (samples)SAX API 允许开发者捕获这些事件,并对它们进行操作。
    SAX 处理涉及以下几步:
    · 创建事件处理程序。 
    · 创建 SAX 解析器。 
    · 将事件处理程序分配给解析器。 
    · 对文档进行解析,将每个事件发送给处理程序。 
    基于事件处理的利弊
    这种处理的好处非常象流介质的好处;可以立即开始分析,而不是必须等待所有要处理的数据。同样,由于应用程序简单地检查经过其的数据,所以不需要将数据存储在内存里。当遇到大文档时,这是一个突出的优势。一般来讲,SAX 还比其替代物"文档对象模型"快。
    另一方面,由于应用程序不以任何方式存储数据,所以,使用 SAX 时,不可能对数据进行更改,或者"返回"至数据流中前面的数据。
    DOM 和基于树的处理
    "文档对象模型"或 DOM 是处理 XML 数据的"传统"方法。使用 DOM 时,数据以类树结构被装入内存中。
    例如,在上一屏中作为示例所使用的同一文档将被表示为节点,如左边所示。
    矩形框表示元素节点,椭圆形表示文本节点。
    DOM 使用根节点和父子关系。例如,在本例中,samples 将是带有五个子节点的根节点:三个文本节点(空白)和两个元素节点 server 和 monitor。
    要认识到一件重要的事情,实际上,server 和 monitor 有 null 值。相反,它们有子文本节点 UNIX 和 color。
     
    基于树处理的利弊
    DOM 和通过扩展基于树的处理有几项好处。首先,由于树在内存中是持久的,可以修改它,所以应用程序可以更改数据和结构。也可以在任何时候遍历树,这与 SAX 的"一次性处理"不一样。还可以更简单地使用 DOM。
    另一方面,在内存中构建这些树需要大量的开销。处理一些大文件时通常会完全超出系统能力。此外,创建 DOM 树是一个非常缓慢的过程。在 SAX 与 DOM 之间,如何选择
    选择 DOM 还是 SAX,这取决于几个因素:
    · 应用程序的目的:如果必须对数据进行更改,并且作为 XML 将它输出,则在大多数情况下,使用 DOM。与使用 XSL 转换来完成的简单结构更改不一样,如果是对数据本身进行更改,则尤其应该使用 DOM。 
    · 数据的数量:对于大文件,SAX 是更好的选择。 
    · 将如何使用数据:如果实际上只使用一小部分数据,则使用 SAX 将数据抽取到应用程序中,这种方法更好些。另一方面,如果知道将需要向后引用已经处理过的信息,则 SAX 可能不是正确的选择。 
    · 需要速度:通常,SAX 实现比 DOM 实现快。 
    记住 SAX 和 DOM 不是互斥的,这一点很重要。可以使用 DOM 来创建事件的 SAX 流,可以使用 SAX 来创建 DOM 树。事实上,大多数解析器实际常常使用 SAX 来创建 DOM 树!
    --------------------------
    让生命时刻充满着激情!