From 06cf5caa2d8691f224185780bb6da886ce368160 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 26 Jun 2020 10:15:53 +0000 Subject: [PATCH] [bug-64561] XWPFSDTContent.getText() is empty for nested SDT elements git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1879223 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xwpf/usermodel/XWPFSDTContent.java | 23 ++++++++++-------- .../poi/xwpf/usermodel/TestXWPFSDT.java | 11 +++++++++ test-data/spreadsheet/Bug64561.docx | Bin 0 -> 17630 bytes 3 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 test-data/spreadsheet/Bug64561.docx diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java index f39c5cf482..eaaf94d873 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java @@ -21,12 +21,7 @@ import java.util.List; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentBlock; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtContentRun; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; /** * Experimental class to offer rudimentary read-only processing of @@ -50,11 +45,19 @@ public class XWPFSDTContent implements ISDTContent { if (sdtRun == null) { return; } - for (CTR ctr : sdtRun.getRArray()) { - XWPFRun run = new XWPFRun(ctr, parent); - // runs.add(run); - bodyElements.add(run); + XmlCursor cursor = sdtRun.newCursor(); + cursor.selectPath("./*"); + while (cursor.toNextSelection()) { + XmlObject o = cursor.getObject(); + if (o instanceof CTR) { + XWPFRun run = new XWPFRun((CTR) o, parent); + bodyElements.add(run); + } else if (o instanceof CTSdtRun) { + XWPFSDT c = new XWPFSDT(((CTSdtRun) o), part); + bodyElements.add(c); + } } + cursor.dispose(); } public XWPFSDTContent(CTSdtContentBlock block, IBody part, IRunBody parent) { diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java index 4bf87fcbb0..c1ca100be5 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java @@ -30,6 +30,17 @@ import org.junit.Test; public final class TestXWPFSDT { + /** + * Test text extraction from nested SDTs + */ + @Test + public void testNestedSDTs() throws Exception { + try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Bug64561.docx")) { + XWPFAbstractSDT sdt = extractAllSDTs(doc).get(0); + assertEquals("extracted text", "Subject", sdt.getContent().getText()); + } + } + /** * Test simple tag and title extraction from SDT */ diff --git a/test-data/spreadsheet/Bug64561.docx b/test-data/spreadsheet/Bug64561.docx new file mode 100644 index 0000000000000000000000000000000000000000..f34fe701bf3ebf57419d46e321541ea058a029c1 GIT binary patch literal 17630 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 literal 0 HcmV?d00001 -- 2.39.5