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

Reply via email to