Skip to content

Commit 8a2cba2

Browse files
committed
Support multiple elements (w:t, w:delText, w:tab) in w:r.
1 parent 0869bdc commit 8a2cba2

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

src/PhpWord/Reader/Word2007/AbstractPart.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -241,14 +241,18 @@ protected function readRun(XMLReader $xmlReader, \DOMElement $domNode, $parent,
241241
if ($xmlReader->elementExists('w:br', $domNode)) {
242242
$parent->addTextBreak();
243243
}
244-
if ($xmlReader->elementExists('w:t', $domNode) || $xmlReader->elementExists('w:tab', $domNode)) {
244+
if ($xmlReader->elementExists('w:t', $domNode) || $xmlReader->elementExists('w:tab', $domNode) || $xmlReader->elementExists('w:delText', $domNode)) {
245245
// TextRun
246-
if ($xmlReader->elementExists('w:tab', $domNode)) {
247-
$textContent = "\t";
248-
} elseif ($domNode->parentNode->nodeName == 'w:del') {
249-
$textContent = $xmlReader->getValue('w:delText', $domNode);
250-
} else {
251-
$textContent = $xmlReader->getValue('w:t', $domNode);
246+
$textContent = '';
247+
$nodes = $xmlReader->getElements('w:t|w:delText|w:tab', $domNode);
248+
foreach ($nodes as $node) {
249+
if ($node->nodeName == 'w:t') {
250+
$textContent .= $node->nodeValue;
251+
} elseif ($node->nodeName == 'w:delText') {
252+
$textContent .= $node->nodeValue;
253+
} elseif ($node->nodeName == 'w:tab') {
254+
$textContent .= "\t";
255+
}
252256
}
253257
/** @var AbstractElement $element */
254258
$element = $parent->addText($textContent, $fontStyle, $paragraphStyle);

tests/PhpWord/Reader/Word2007/ElementTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,16 @@ public function testReadTab()
9191
{
9292
$documentXml = '<w:p>
9393
<w:r>
94+
<w:t>One</w:t>
9495
<w:tab/>
96+
<w:t>Two</w:t>
9597
</w:r>
9698
</w:p>';
9799

98100
$phpWord = $this->getDocumentFromString($documentXml);
99101

100102
$elements = $this->get($phpWord->getSections(), 0)->getElements();
101103
$this->assertInstanceOf('PhpOffice\PhpWord\Element\Text', $elements[0]);
102-
$this->assertEquals("\t", $elements[0]->getText());
104+
$this->assertEquals("One\tTwo", $elements[0]->getText());
103105
}
104106
}

0 commit comments

Comments
 (0)