Author: fanningpj Date: Fri Jun 26 10:15:53 2020 New Revision: 1879223 URL: http://svn.apache.org/viewvc?rev=1879223&view=rev Log: [bug-64561] XWPFSDTContent.getText() is empty for nested SDT elements
Added: poi/trunk/test-data/spreadsheet/Bug64561.docx (with props) Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java Modified: poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java?rev=1879223&r1=1879222&r2=1879223&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java Fri Jun 26 10:15:53 2020 @@ -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 I 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) { Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java?rev=1879223&r1=1879222&r2=1879223&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFSDT.java Fri Jun 26 10:15:53 2020 @@ -31,6 +31,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 */ @Test Added: poi/trunk/test-data/spreadsheet/Bug64561.docx URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/Bug64561.docx?rev=1879223&view=auto ============================================================================== Binary file - no diff available. Propchange: poi/trunk/test-data/spreadsheet/Bug64561.docx ------------------------------------------------------------------------------ --- svn:mime-type (added) +++ svn:mime-type Fri Jun 26 10:15:53 2020 @@ -0,0 +1 @@ +application/vnd.openxmlformats-officedocument.wordprocessingml.document --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org