【问题标题】:Xerces behaving differently on SUN JRE v1.5 and IBM J9 v1.5Xerces 在 SUN JRE v1.5 和 IBM J9 v1.5 上的行为不同
【发布时间】:2011-05-28 17:17:40
【问题描述】:

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

问题是,当在SUN JDK 1.5.0_01 上执行以下代码 sn-p 时,它工作正常(这是当我使用带有 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 jars)。上面代码中的docorg.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

感谢任何想法、建议或解决方法。谢谢。

【问题讨论】:

  • 没有进入 for 循环 - 这是否意味着,tags 是一个空的 NodeList 或者你得到一个异常?
  • @Andreas:是的,tags 是一个空的 NodeList。如果发生异常,它会在try-catch 块中捕获(未作为 sn-p 的一部分发布)或显示在控制台上。

标签: java html dom xerces j9


【解决方案1】:

我有两个想法。

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

【讨论】:

  • +1 感谢您的回答。 对于您的第一点,我将 xerces jar 作为外部 jar 添加到我的应用程序中。因此,从您的回答中,我不确定是选择默认的 JRE 版本还是从我添加的 jar 中选择。 对于第二部分,两种情况下的操作系统都是相同的。所以这方面没有问题。
  • 是的。这是由于类路径问题。实际上,在我的应用程序中,我已经大量修改了 nekohtml 以提高性能(主要是 AbstractDomParser 类已更改)。在 IBM J9 中,它采用了 jre/lib/xml.jar 中的默认实现。设置属性fConfiguration.setProperty(DOCUMENT_CLASS_NAME,"org.apache.html.dom.HTMLDocumentImpl"); 解决了这个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多