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 解析的文章(它很旧但仍然有效),特别注意该characters方法是如何实现的。这是非常不直观的,并且会绊倒每个人,您会接到多个电话,characters似乎没有充分的理由。

SAX 上的 Java 教程也对 characters 方法有一个简短的解释:

解析器不需要一次返回任何特定数量的字符。解析器一次可以返回从单个字符到数千个字符的任何内容,并且仍然是符合标准的实现。因此,如果您的应用程序需要处理它看到的字符,明智的做法是让 characters() 方法将字符累积到 java.lang.StringBuffer 中,并仅在确定所有字符都已找到时才对它们进行操作。

在您的情况下(没有混合内容的 XML),这意味着存储多个 characters() 调用的结果,直到下一次调用 endElement。

于 2011-07-05T20:17:59.907 回答
2

请参阅 characters() ContentHandler 方法。仔细阅读 javadoc - 当您可能只期望一个时,您可能会收到多个调用。

于 2011-07-05T19:39:10.130 回答