如何简洁地从 docx4j 运行 中提取文本?
How to succinctly extract text from a docx4j run?
我想从 document.xml
中的 运行 中使用 docx4j 从 DOCX 文件中提取文本,如下所示:
<w:document mc:Ignorable="w14 w15 w16se wp14">
<w:body>
<w:r>
<w:rPr>
<w:rFonts w:ascii="TimesNewRomanRegular" w:hAnsi="TimesNewRomanRegular" w:cs="TimesNewRomanRegular"/>
<w:b/>
<w:sz w:val="19"/>
<w:szCs w:val="19"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>CEO</w:t>
</w:r>
...
我提取了 运行,现在我想获取每个 运行 的文本。下面的代码有效但非常冗长。是否有可能以更简洁的方式获取 org.docx4j.wml.R 实例的文本?
public static Optional<String> runText(org.docx4j.wml.R run)
{
return run.getContent()
.stream()
.map(JAXBElement.class::cast)
.map(JAXBElement::getValue)
.filter(Text.class::isInstance)
.map(Text.class::cast)
.map(Text::getValue)
.findFirst();
}
虽然 "R::getContent" 和 "R::getRPr" 存在,但我想知道为什么 "R::getText" 在文本文档中不存在。
Javadoc:
/**
* Extract contents of descendant <w:t> elements.
*
* @param o
* @return String
* @since 6.0.0
*/
我想从 document.xml
中的 运行 中使用 docx4j 从 DOCX 文件中提取文本,如下所示:
<w:document mc:Ignorable="w14 w15 w16se wp14">
<w:body>
<w:r>
<w:rPr>
<w:rFonts w:ascii="TimesNewRomanRegular" w:hAnsi="TimesNewRomanRegular" w:cs="TimesNewRomanRegular"/>
<w:b/>
<w:sz w:val="19"/>
<w:szCs w:val="19"/>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>CEO</w:t>
</w:r>
...
我提取了 运行,现在我想获取每个 运行 的文本。下面的代码有效但非常冗长。是否有可能以更简洁的方式获取 org.docx4j.wml.R 实例的文本?
public static Optional<String> runText(org.docx4j.wml.R run)
{
return run.getContent()
.stream()
.map(JAXBElement.class::cast)
.map(JAXBElement::getValue)
.filter(Text.class::isInstance)
.map(Text.class::cast)
.map(Text::getValue)
.findFirst();
}
虽然 "R::getContent" 和 "R::getRPr" 存在,但我想知道为什么 "R::getText" 在文本文档中不存在。
Javadoc:
/**
* Extract contents of descendant <w:t> elements.
*
* @param o
* @return String
* @since 6.0.0
*/