2011-07-05 16 views
1

今、私はJavaのSAXパーサーを使用して、.docxファイルのアーカイブ内にある "document.xml"ファイルを解析しています。以下は、私が解析しようとしているもののサンプルです...今JavaのXMLファイルからテキスト値を解析する

<w:pStyle w:val="Heading2" /> 
    </w:pPr> 
    <w:bookmarkStart w:id="0" w:name="_Toc258435889" /> 
    <w:bookmarkStart w:id="1" w:name="_Toc259085121" /> 
    <w:bookmarkStart w:id="2" w:name="_Toc259261685" /> 
- <w:r w:rsidRPr="00415FD6"> 
    <w:t>Text To Extract</w:t> 
    </w:r> 
    <w:bookmarkEnd w:id="0" /> 
    <w:bookmarkEnd w:id="1" /> 
    <w:bookmarkEnd w:id="2" /> 

サンプルXML文書は、私は、属性値を取り出す方法を知っている、それは難しいことではありません。しかし、ノード内の実際のテキストを取得して解析する方法はわかりません。誰にもこれに関するアイデアや経験がありますか?前もって感謝します。

答えて

3

this article on SAX parsing(古いですがそれでも有効です)を読むには、charactersメソッドの実装方法に特に注意してください。それは非常に直感的ではなく、誰もが迷ってしまいます。なぜなら、何の理由もないように思われるために、charactersへの複数の呼び出しを受けることになります。

またthe Java tutorial on SAX文字の方法の簡単な説明を有する:

パーサーは、一度に文字の任意の特定の数を返すように要求されません。パーサーは、一度に1文字から数千までの何かを返すことができ、依然として標準に準拠した実装です。したがって、アプリケーションが見る文字を処理する必要がある場合は、characters()メソッドをjava.lang.StringBufferに文字を蓄積させ、すべてが見つかった場合にのみ操作してください。

あなたのケース(混在コンテンツのないXML)では、次のendElementの呼び出しまで複数のcharacters()呼び出しの結果を格納することを意味します。

+0

うわー、それは本当に役に立ちました。私は今、文字メソッドを使いこなしているし、ノード内にテキストを取得しています。今私はそれを構造化して、それを私が具体的に望むものに制限する方法を理解する必要があります。おかげでたくさん! –

2

characters()ContentHandlerメソッドを参照してください。 Javadocを注意深く読んでください。あなたが1つしか期待しないときは、複数の呼び出しを得ることができます。

関連する問題