xpath - 我正在使用 docx4j 来读取 .docx 文件,我需要获取文档的段落并替换字符串

标签 xpath jaxb ms-word docx4j

我使用 docx4j 来读取和解析 .docx 文件,但是当我迭代段落时,它会一次性读取而不是全部段落。下面是我正在使用的代码示例。

private void replaceAcrAndDef(String acrName, String acrParensName, String oldDef, String newDef){
    String XPATH_TO_SELECT_TEXT_NODES = "//w:t";
    List<Object> paragraphs = template.getMainDocumentPart().getJAXBNodesViaXPath(XPATH_TO_SELECT_TEXT_NODES, true);
    for (Object obj : paragraphs){
        Text text = (Text) ((JAXBElement)obj).getValue();
        String textValue = text.getValue();
        System.out.println(textValue);
 }

在上面的 for 循环的一次传递中,这将读取为第一段 -

“团队通过对任务、测试、管理和一般服务网络和系统具有直接的 MDA 经验,对需求有深入的了解。建立一个低风险、 react 灵敏的团队对任务、流程和系统有深入了解的好处是优先事项。我们使用基于“集成”

但是缺少该段落的最后部分。这将在连续的传递中出现。我在这里做错了什么。

该段落的全部内容是:

团队拥有任务、测试、管理和一般服务网络和系统的直接 MDA 经验,对需求有深入的了解。这样做的好处是建立一个低风险、 react 灵敏的团队,对使命、流程和优先事项有深入的了解。我们使用基于集成信息技术的基于角色的管理 (RBA) 方法,与联营承包商、现有流程和补充流程协同工作。

我不知道是否有办法获取整个段落,但如果有的话那就太好了,因为我需要逐段进行字符串替换。

最佳答案

我将我的评论扩展为答案:

我猜,该段落包含多个文本元素 (w:t)。您能否提供有关此问题的示例文档?使用 TextUtils.extractText 在段落元素上提取文本怎么样?

尝试 P.toString()。其中引用了 TextUtils,您也可以尝试使用 StringWriter。

<小时/>

使用P.toString() :

// Request paragraphs
final String XPATH_TO_SELECT_TEXT_NODES = "//w:p";
final List<Object> jaxbNodes = wordMLPackage.getMainDocumentPart().getJAXBNodesViaXPath(XPATH_TO_SELECT_TEXT_NODES, true);

for (Object jaxbNode : jaxbNodes){
    final String paragraphString = jaxbNode.toString();
    System.out.println(paragraphString);
}
<小时/>

使用TextUtils.extractText(...)StringWriter :

for (Object jaxbNode : jaxbNodes){
    final StringWriter stringWriter = new StringWriter();
    TextUtils.extractText(jaxbNode, stringWriter);
    final String paragraphString = stringWriter.toString();
    System.out.println(paragraphString);
}

关于xpath - 我正在使用 docx4j 来读取 .docx 文件,我需要获取文档的段落并替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199900/

相关文章:

jaxb - EclipseLink MOXy 不编码用 @XMLAttribute 注释的子图字段

vba - VBA 应用程序如何在英语和法语版本的 Windows/Word 中使用正确的内置样式

vba - 光标在哪个字段? (MS Word,VBA)

xml - 忽略子节点的 XPath 表达式

java - 如何在 JAXB 中使 xml 字段不可编辑

javascript - 具有多个 CSS 类的 Xpath

xml - 在 Marshaller 上设置 CharacterEscapeHandler 变量在 CXF 中无法按预期工作

utf-8 - Microsoft Word DOC 和 DOCX 文件的字符编码?

c++ - 尝试清理时由于崩溃而不可避免的 libxml2 内存泄漏

xslt - XPath表达式选择除特定列表之外的所有XML子节点?