2010-12-21 2 views
1

NekoHTML을 사용하여 일부 HTML을 구문 분석하려고합니다.Xerces는 SUN JRE v1.5 및 IBM J9 v1.5에서 다르게 동작합니다.

문제는 SUN JDK 1.5.0_01에서 아래 코드가 실행될 때 문제가 발생한다는 것입니다.이 코드는 sun 일식과 함께 사용할 때 발생합니다. 그러나 동일한 일이 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와 함께).

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 

모든 아이디어, 제안 또는 해결 방법은 감사 : 위의 코드에서 doc 유형 org.w3.dom.Document (사용 런타임 클래스는 org.apache.html.dom.HTMLDocumentImpl입니다) 다음과 같이

IBM의 J9 정보

은이다. 감사.

+0

* for 루프에 입력되지 않음 * - 즉, 'tags'는 빈 NodeList이거나 예외가 발생합니까? –

+0

@Andreas : 예'tags'는 빈 NodeList입니다. 예외가 발생하면'try-catch' 블록 (스 니펫의 일부로 게시되지 않음)에 포착되거나 콘솔에 표시됩니다. – Favonius

답변

1

나는 2 개의 아이디어가있다.

  1. xerces가 JRE 설치의 일부인지 확인 했으므로 여기에서 응용 프로그램의 클래스 경로에 도착합니다. 아마도 SUN과 IBM은 서로 다른 버전의 xerces를 제공합니다. 그래서, 첫 번째 접근 방식으로 그것을 확인하고 아마도 당신이 가지고있는 IBM을 SUN의 버전으로 대체하려고 시도 할 것입니다. 2 가지 옵션이 도움이된다면 : SUN의 xerces로 IBM java를 계속 실행하거나 IBM의 xerces에 대해 계속 조사하십시오.
  2. 개발자 환경과 프로덕션 환경간에 다른 차이점이 있습니까? 이들이 동일한 운영 체제입니까? 생산을 위해 개발 및 유닉스 용 윈도우를 (예를 들어) 사용하고 있지만 xml이 새 라인으로 \ r \ n으로 Windows에 쓰여질 가능성이 있습니까? 또는 XML에 유니 코드 문자가 포함되어 있고 창에 작성된 경우 유니 코드임을 나타내는 특수한 (보이지 않는) 접두사를 포함 할 수 있습니다. 이 접두사로 인해 파서가 실패 할 수 있습니다.
+0

+1 답변을 보내 주셔서 감사합니다. ** 귀하의 첫 번째 지점 **, 내 응용 프로그램에서 외부 항아리로 xerces 항아리를 추가합니다. 그래서 당신의 대답에서 기본 JRE 버전을 선택하는지 아니면 내가 추가 한 jar 파일을 선택하는지 확실하지 않습니다. ** 두 번째 부분 **의 경우 OS는 두 경우 모두 동일합니다. 그래서 그 앞에서도 아무런 문제가 없습니다. – Favonius

+0

예. classpath 문제 때문입니다. 실제로 내 애플 리케이션에서 크게 (주로'AbstractDomParser' 클래스가 변경되었습니다) 성능을 위해 nekohtml을 수정했습니다. IBM J9에서는 jre/lib/xml.jar의 기본 구현을 선택했습니다. fConfiguration.setProperty (DOCUMENT_CLASS_NAME, "org.apache.html.dom.HTMLDocumentImpl"); 속성을 설정하면 문제가 해결됩니다. 감사. – Favonius

관련 문제