从xml文档中提取纯文本的最简单方法是什么?

时间:2010-10-18 19:57:52

标签: java xml

我有一些xml格式的电子书。书籍页面使用处理说明进行标记(例如<?pg 01?>)。我需要以纯文本形式提取书籍的内容,一次一页,并将每个页面保存为文本文件。这样做的最佳方式是什么?

6 个答案:

答案 0 :(得分:1)

最简单的方法,假设您需要将其集成到Java程序中(如标记所示),可能是使用SAX解析器,例如XMLReader提供的。您为textprocessing instructions编写了ContentHandler回调。

调用p-i处理程序时,打开一个新的输出文件。

调用文本处理程序时,将字符数据复制到当前打开的输出文件。

This tutorial有一些有用的示例代码。

如果您不需要将其集成到Java程序中,我可能会使用XSLT 2.0(Saxon is free)。 XSLT 1.0将不允许多个输出文档,但XSLT 2.0将会,并且它还将通过“里程碑标记”(您的“pg”处理指令)更容易进行分组。如果您对此方法感兴趣,只需询问...并提供有关输入文档结构的更多信息。

P.S。即使您需要将其集成到Java程序中,您也可以从Java调用XSLT - 例如,Saxon是用Java编写的。但是我认为如果您只是处理PI和文本,那么使用SAX解析器就会更省力。

答案 1 :(得分:0)

我可能会使用castor来做到这一点。它是一个java工具,允许您指定对java对象的绑定,然后可以将其作为文本输出到文件

答案 2 :(得分:0)

您需要一本电子书渲染器来处理您的图书所使用的格式(如果他们使用反斜杠作为处理说明,我非常怀疑它是XML)。此外,如果您只想获取实际文本,XPath可以创建奇迹,只需对所有文本使用// text()即可。

答案 3 :(得分:0)

您可以尝试将其转换为YAML并在文字处理器中进行编辑 - 然后一个简单的宏应该立即修复它。

我刚刚浏览了这个XML到YAML转换实用程序 - 它很小但我没有测试它或任何东西。

http://svn.pyyaml.org/pyyaml-legacy/trunk/experimental/XmlYaml/convertyaml_map.py

答案 4 :(得分:0)

使用带有<xsl:output method="text"/>的XSL样式表 你现在甚至可以在eclipse中调试样式表。

答案 5 :(得分:0)

您可以使用Apache Tika执行此操作,例如:

    byte[] value = //your xml content as a byte array
    Parser parser = new XMLParser()
    org.xml.sax.ContentHandler textHandler = new BodyContentHandler(-1)
    Metadata metadata = new Metadata()
    ParseContext context = new ParseContext()
    parser.parse(new ByteArrayInputStream(value), textHandler, metadata, context)
    return textHandler.toString()

如果使用maven,你可能想要以下两个:

         <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>1.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers</artifactId>
            <version>1.13</version>
        </dependency>