背景:
最近,我的任务是从 HTML 表单中解析出大量数据并将其构建到一个可用的数据库表中。有问题的 HTML 页面是很久以前生成的,原始源数据已失传。因此,我决定放弃 Java 中的快速解析器来获取这些数据并对其进行适当的格式化。将利用 SAX,因为我不需要以任何方式修改层次结构,只需要一次传递。下面包含一个非常小的 HTML 示例:
<html>
<table>
<tr>
<table>
<tr>
<td><div>District 1</div><td></tr>
<tr>
<td><div>Valid Code 1</div></td>
<td><div>Valid Code 2</div></td>
<td><div>Valid Code 3</div></td>
</tr>
</table>
</tr>
ETC...
显然,HTML 不仅仅是上面概述的内容,但这应该给出结构的概念。
问题:
我正在寻找一种智能的、可扩展的、自记录的和(如果可能的话)快速/精简的方法来使用 SAX 解析器跟踪我在 XML 层次结构中的当前位置。由于使用 SAX,我有三个仅针对单个元素触发的离散方法调用,因此此状态必须是持久且可存储的。这样做的最明显和最简单的方法是使用大量布尔变量,但这不是我之前列出的四个租户。我还考虑过使用位掩码来维护大量标志,但这很难自我记录或非常可扩展。最后,我考虑了一个有限状态自动机(或其他类似的衍生产品,例如下推自动机),但对于一次性机器来说,这些似乎有点矫枉过正。
也许我过度思考一次性代码的问题,我一直在寻求扩展我的技能组合,因为我不得不编写不是一次性的代码。提前感谢您的时间和帮助。
参考:
http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
大型嵌套 switch 语句的设计模式 (与 XML 没有直接关系,但给出了一些关于使用大量离散条件进行设计的想法)