1

そのため、現在、Java で SAX パーサーを使用して、.docx ファイルのアーカイブ内にある「document.xml」ファイルを解析しています。以下は、私が解析しようとしているもののサンプルです...

サンプル 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" /> 

今、私は属性値を取り出す方法を知っています。それは難しいことではありません。ただし、ノード内の実際のテキストにアクセスして解析する方法がわかりません。誰かがこれについてアイデアや以前の経験を持っていますか? 前もって感謝します。

4

2 に答える 2

3

SAX 構文解析に関するこの記事(古いものですが、まだ有効です) を読んで、メソッドがどのように実装されているかに特に注意してくださいcharacterscharactersそれは非常に直感的ではなく、誰もがつまずきます。正当な理由のないように思われる理由で、複数の電話を受けることになります。

また、SAX の Java チュートリアルには、characters メソッドの簡単な説明があります。

パーサーは、一度に特定の数の文字を返す必要はありません。パーサーは、一度に 1 文字から最大数千文字まで何でも返すことができ、それでも標準準拠の実装です。そのため、アプリケーションで検出した文字を処理する必要がある場合は、characters() メソッドで文字を java.lang.StringBuffer に蓄積し、すべての文字が見つかったことが確実な場合にのみ操作することをお勧めします。

あなたの場合(混合コンテンツのないXML)、それはendElementへの次の呼び出しまで複数のcharacters()呼び出しの結果を保存することを意味します。

于 2011-07-05T20:17:59.907 に答える
2

characters() ContentHandler メソッドを参照してください。javadoc を注意深く読んでください。呼び出しが 1 回しかないと思われる場合でも、複数の呼び出しが発生する可能性があります。

于 2011-07-05T19:39:10.130 に答える