path = realpath($path); } /** * Get DOM from file * * @param string $file * @return \DOMDocument */ public function getFileDom($file = 'word/document.xml') { if (null !== $this->dom && $file === $this->file) { return $this->dom; } $this->xpath = null; $this->file = $file; $file = $this->path . '/' . $file; libxml_disable_entity_loader(false); $this->dom = new \DOMDocument(); $this->dom->load($file); libxml_disable_entity_loader(true); return $this->dom; } /** * Get node list * * @param string $path * @param string $file * @return \DOMNodeList */ public function getNodeList($path, $file = 'word/document.xml') { if (null === $this->dom || $file !== $this->file) { $this->getFileDom($file); } if (null === $this->xpath) { $this->xpath = new \DOMXPath($this->dom); $this->xpath->registerNamespace('w14', 'http://schemas.microsoft.com/office/word/2010/wordml'); } return $this->xpath->query($path); } /** * Get element * * @param string $path * @param string $file * @return \DOMElement */ public function getElement($path, $file = 'word/document.xml') { $elements = $this->getNodeList($path, $file); return $elements->item(0); } /** * Get file name * * @return string */ public function getFile() { return $this->file; } /** * Get path * * @return string */ public function getPath() { return $this->path; } /** * Get element attribute * * @param string $path * @param string $attribute * @param string $file * @return string */ public function getElementAttribute($path, $attribute, $file = 'word/document.xml') { return $this->getElement($path, $file)->getAttribute($attribute); } /** * Check if element exists * * @param string $path * @param string $file * @return string */ public function elementExists($path, $file = 'word/document.xml') { $nodeList = $this->getNodeList($path, $file); return !($nodeList->length == 0); } /** * Returns the xml, or part of it as a formatted string * * @param string $path * @param string $file * @return string */ public function printXml($path = '/', $file = 'word/document.xml') { $element = $this->getElement($path, $file); if ($element instanceof \DOMDocument) { $element->formatOutput = true; $element->preserveWhiteSpace = false; return $element->saveXML(); } $newdoc = new \DOMDocument(); $newdoc->formatOutput = true; $newdoc->preserveWhiteSpace = false; $node = $newdoc->importNode($element, true); $newdoc->appendChild($node); return $newdoc->saveXML($node); } }