Xerces在SUN JRE v1.5和IBM J9 v1.5上的表现不同

时间:2010-12-21 09:24:01

标签: java html dom xerces j9

我正在尝试使用NekoHTML解析一些HTML。

问题是,当SUN JDK 1.5.0_01上执行下面的代码片段时,它工作正常(这是我使用带有sun jre的eclipse时)。但是当在IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223ifx-20070323 (JIT enabled)上执行相同的操作时,它就不起作用了(这是我使用IBM RAD进行开发的时候)。

NodeList tags = doc.getElementsByTagName("td"); 

for (int i = 0; i < tags.getLength(); i++) 
{
 Element elem = (Element) tags.item(i);
 // do something with elem
}

通过正常工作我的意思是我得到一个“td”元素列表,我可以进一步处理。在J9的情况下,我没有进入for循环。

我正在使用最新版本的NekoHTML(以及捆绑的Xerces jar)。上面代码中的doc类型为org.w3.dom.Document(使用的运行时类为org.apache.html.dom.HTMLDocumentImpl

IBM J9的详细信息如下:

java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pwi32devifx-20070323 (ifix 117674: SR4 + 116644 + 114941 + 116110 + 114881))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows XP x86-32 j9vmwi3223ifx-20070323 (JIT enabled)
J9VM - 20070322_12058_lHdSMR
JIT  - 20070109_1805ifx3_r8
GC   - WASIFIX_2007)
JCL  - 20070131

任何想法,建议或解决方法都表示赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

我有两个想法。

  1. 我刚刚验证了xerces是JRE安装的一部分,所以我相信它从那里到达应用程序的类路径。 SUN和IBM可能会为您带来不同版本的xerces。因此,作为第一种方法检查它,并可能尝试将您在IBM下的内容替换为SUN的版本。如果它有两个选择:继续使用SUN的xerces运行IBM java,或者继续调查IBM的xerces有什么问题。
  2. 您的开发和生产环境之间是否存在其他差异?这些是相同的操作系统吗?是否有机会使用(例如)windows进行开发和unix进行生产,但是你的xml是用\ r \ n作为新行写在Windows上的吗?甚至更多:如果您的XML包含unicode字符并在Windows中编写,则它可以包含特殊(不可见)前缀,表示这是unicode。此前缀可能导致解析器失败。