2010-12-21 10 views
1

NekoHTMLを使用して一部のHTMLを解析しようとしています。XercesがSUN JRE v1.5とIBM J9 v1.5で異なる動作をする

問題は、以下のコードスニペットが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 jarsと一緒に)を使用しています。次のように上記のコードで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 

任意のアイデア、提案または回避策が理解されます。ありがとう。

+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. 開発環境と本番環境の違いは他にありますか?これらは同じオペレーティングシステムですか?それは、あなたが生産用に開発やUNIX用に(例えば)ウィンドウを使用しているのですが、あなたのXMLは新しい行として\ r \ nでWindows上に書かれていますか?さらに、XMLにユニコード文字が含まれていて、ウィンドウに書かれている場合は、これがユニコードであることを示す特別な(見えない)プレフィックスを含むことができます。この接頭辞により、パーサーが失敗する可能性があります。
+0

+1答えをありがとう。 **あなたの最初のポイント**のために、私はxerces jarをアプリケーションの外部jarとして追加しています。あなたの答えからは、デフォルトのJREバージョンを選択するのか、それとも追加したjarから選択するのかはわかりません。 **第2部**ではOSはどちらの場合も同じです。だから、正面から問題はない。 – Favonius

+0

これはクラスパスの問題によるものです。実際に私のアプリケーションでは、パフォーマンスのためにnekohtmlを大幅に変更しました(主に 'AbstractDomParser'クラスが変更されました)。 IBM J9では、jre/lib/xml.jarのデフォルトの実装を選択していました。 'fConfiguration.setProperty(DOCUMENT_CLASS_NAME、" org.apache.html.dom.HTMLDocumentImpl ");プロパティを設定して問題を解決しました。ありがとう。 – Favonius

関連する問題