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

问题描述:

我有一些XML格式的电子书。书籍的页面使用处理指令进行标记(例如<?pg 01?>)。我需要以纯文本的方式提取本书的内容,一次一页,并将每页保存为文本文件。这样做的最好方法是什么?从xml文档中提取纯文本最简单的方法是什么?

我可能会使用脚轮来做到这一点。这是一个java工具,它允许你指定绑定到java对象,然后你可以输出文本到文件

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

+0

这不会告诉他哪里把它瓜分以便每个页面都进入一个单独的输出文件。 – LarsH 2010-10-18 20:21:32

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

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

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

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

最简单的方法,假设您需要将其集成到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解析器就不那么费力。

+0

+1对于XSLT 2.0推荐。 – 2010-10-18 22:39:41

你可以用Apache Tika像这样做:如果

使用maven
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() 

,你可能会想这两者的下面:

  <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>