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

Java Xerces在SUN JRE v1.5和IBM J9 v1.5上的表现不同,java,html,dom,xerces,j9,Java,Html,Dom,Xerces,J9,我正在尝试使用解析一些HTML 问题是,当在sunjdk1.5.0_01上执行下面的代码片段时,它工作得很好(这是在我将eclipse与sunjre一起使用时)。但是当同样的事情在IBMJ9VM(build2.3,J2RE1.5.0IBMJ9 2.3WindowsXPx86-32J9VMWI3223IFX-20070323(启用JIT)上执行时,它就不工作了(这是在我使用IBMRAD进行开发时) 任何想法、建议或解决方法都将不胜感激。谢谢。我有两个想法 我刚刚验证了xerces是JRE安装的一部

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

问题是,当在
sunjdk1.5.0_01
上执行下面的代码片段时,它工作得很好(这是在我将eclipse与sunjre一起使用时)。但是当同样的事情在
IBMJ9VM(build2.3,J2RE1.5.0IBMJ9 2.3WindowsXPx86-32J9VMWI3223IFX-20070323(启用JIT)
上执行时,它就不工作了(这是在我使用IBMRAD进行开发时)

任何想法、建议或解决方法都将不胜感激。谢谢。

我有两个想法

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

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

  • 不输入for循环-这是否意味着,
    tags
    是一个空节点列表,或者您得到了一个异常?@Andreas:Yes
    tags
    是一个空节点列表。如果出现异常,它可能会在
    try catch
    块中捕获(不作为片段的一部分发布)或者显示在控制台上。不进入for循环-这是否意味着,
    tags
    是一个空节点列表,或者您得到了一个异常?@Andreas:Yes
    tags
    是一个空节点列表。如果出现异常,它将在
    try catch
    块中捕获(不作为代码段的一部分发布)或者显示在控制台上。+1谢谢你的回答。第一点,我将xerces jar作为外部jar添加到我的应用程序中。因此,从你的回答中,我不确定是选择默认JRE版本还是从我添加的jar中选择。第二部分,操作系统在这两种情况下都是相同的。因此从这一方面来说没有问题。是的。这是由于类路径问题。实际上,在我的应用程序中,为了提高性能,我对nekohtml进行了大量修改(主要是
    AbstractDomParser
    类被更改)。在IBM J9中,它采用了jre/lib/xml.jar中的默认实现。设置属性
    fConfiguration.setProperty(文档类名称,“org.apache.html.dom.HTMLDocumentImpl”);
    解决了这个问题。谢谢。+1谢谢你的回答。第一点,我将xerces jar作为外部jar添加到我的应用程序中。因此,从你的回答中,我不确定是选择默认JRE版本还是从我添加的jar中选择。第二部分,操作系统在这两种情况下都是相同的。因此,这方面没有问题。是的。它是d实际上,在我的应用程序中,为了提高性能,我对nekohtml进行了大量修改(主要是
    AbstractDomParser
    类被更改了)。在IBM J9中,它采用了jre/lib/xml.jar中的默认实现。设置属性
    fConfiguration.setProperty(DOCUMENT_class_NAME,“org.apache.html.dom.HTMLDocumentImpl”);
    解决了这个问题。谢谢。
    NodeList tags = doc.getElementsByTagName("td"); 
    
    for (int i = 0; i < tags.getLength(); i++) 
    {
     Element elem = (Element) tags.item(i);
     // do something with elem
    }
    
    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