我正在解析(使用Groovy)从LibreOffice .odt (写入器)文件中获得的content.xml。
我想确保我吸住了文件中的所有文本,按换行符拆分。
在Java的org.w3c.dom.Node (或Groovy的groovy.util.Node)中,有一种方法可以提取任意节点(dom.Node.getTextContent/util.Node.text)下的所有文本。对于最高的节点,这将打印文件中的所有文本,但会忽略换行符。
这让我假设我必须(深度优先)遍历结构,识别单独的线条。
通过解析这样的结构,我发现节点名称中倾向于包含文本的“本地部分”是"p“(段落)和"h”(标题)。
我还假设"p“或"h”不能嵌套另一个"p“或"h”(尽管有一些复杂的嵌入结构,我相信它们可以...)。但是清楚地检查给定"p“下的任何spans都将生成您已经从其祖先"p”节点获得的文本。
但是"p“和"h”是我唯一需要查看的QNames吗?I我应该如何处理嵌入结构的可能性(例如,包含一些文本的图形)。
有没有什么技巧可以让我逐个节点地获得所有文本的全面列表,确保没有遗漏任何文本,也没有重复的文本?
如果做不到这一点,有没有OpenDocument格式的某些方面可以让我解决这个问题?有趣的是,brief overview at Wikip中"content.xml“下的示例只使用了这两个QNames,"p”和"h“。
发布于 2018-02-10 04:56:11
蒂姆·耶茨的评论似乎是最好的选择。
除非有人反对,否则我不会删除这个问题,因为似乎没有另一个类似的问题。
从最初的实验来看,org.odftoolkit.simple.TextDocument.getParagraphIterator()似乎会遍历所有段落,包括"h“QNames (= headings),也包括空段落。这是个好兆头。
注意:这些“段落”实际上可能是多行段落:在Writer文件中,“段落标记”和“换行符”是不同的。然而,这个问题的解决方案非常简单:只需在换行符上拆分段落getTextContent() /( Groovy people的textContent属性) String ...
https://stackoverflow.com/questions/48712800
复制相似问题