我有一些xml格式的电子书。书籍页面使用处理说明进行标记(例如<?pg 01?>
)。我需要以纯文本形式提取书籍的内容,一次一页,并将每个页面保存为文本文件。这样做的最佳方式是什么?
答案 0 :(得分:1)
最简单的方法,假设您需要将其集成到Java程序中(如标记所示),可能是使用SAX解析器,例如XMLReader提供的。您为text和processing 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>