Support multiple elements (w:t, w:delText, w:tab) in w:r.

This commit is contained in:
Damjan Cvetko 2018-03-04 17:13:06 +01:00
parent 0869bdc8f7
commit 8a2cba2292
2 changed files with 14 additions and 8 deletions

View File

@ -241,14 +241,18 @@ abstract class AbstractPart
if ($xmlReader->elementExists('w:br', $domNode)) {
$parent->addTextBreak();
}
if ($xmlReader->elementExists('w:t', $domNode) || $xmlReader->elementExists('w:tab', $domNode)) {
if ($xmlReader->elementExists('w:t', $domNode) || $xmlReader->elementExists('w:tab', $domNode) || $xmlReader->elementExists('w:delText', $domNode)) {
// TextRun
if ($xmlReader->elementExists('w:tab', $domNode)) {
$textContent = "\t";
} elseif ($domNode->parentNode->nodeName == 'w:del') {
$textContent = $xmlReader->getValue('w:delText', $domNode);
} else {
$textContent = $xmlReader->getValue('w:t', $domNode);
$textContent = '';
$nodes = $xmlReader->getElements('w:t|w:delText|w:tab', $domNode);
foreach ($nodes as $node) {
if ($node->nodeName == 'w:t') {
$textContent .= $node->nodeValue;
} elseif ($node->nodeName == 'w:delText') {
$textContent .= $node->nodeValue;
} elseif ($node->nodeName == 'w:tab') {
$textContent .= "\t";
}
}
/** @var AbstractElement $element */
$element = $parent->addText($textContent, $fontStyle, $paragraphStyle);

View File

@ -91,7 +91,9 @@ class ElementTest extends AbstractTestReader
{
$documentXml = '<w:p>
<w:r>
<w:t>One</w:t>
<w:tab/>
<w:t>Two</w:t>
</w:r>
</w:p>';
@ -99,6 +101,6 @@ class ElementTest extends AbstractTestReader
$elements = $this->get($phpWord->getSections(), 0)->getElements();
$this->assertInstanceOf('PhpOffice\PhpWord\Element\Text', $elements[0]);
$this->assertEquals("\t", $elements[0]->getText());
$this->assertEquals("One\tTwo", $elements[0]->getText());
}
}