Laravel - DOMDocument :: loadXML():打开和结束标记不匹配 - PhpWord错误

时间:2016-05-02 17:55:57

标签: php xml laravel laravel-5 phpword

我有3个用HTML编写的Blade文件,我目前正在使用WKHTMLTOPDF将它们导出为PDF格式,我现在想将相同的HTML文件导出到Word文档。

到目前为止,我能找到的最好的Laravel包是PhpWord

代码片段:

<div class="page-break"></div>

<h3>Introduction</h3>

<p></p>

<p></p>

到目前为止我的代码:

$phpWord = new \PhpOffice\PhpWord\PhpWord();
$section = $phpWord->addSection();    
$report = view('reports.audit-report', $data)->render();

\PhpOffice\PhpWord\Shared\Html::addHtml($section, $report, true);

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('helloWorld.docx');

目前正在返回此错误:

  

DOMDocument :: loadXML():打开和结束标记不匹配:链接第1行   和实体中的div,行:1

令人讨厌的是,无论我删除哪一行,该错误始终存在,直到我删除HTML的每一行!

我可以使用以下代码阻止此错误发生:

libxml_use_internal_errors(true);

然而,它返回:

  

Html.php第136行中的ErrorException:尝试获取非对象的属性

以前是否有人成功解决了这些错误?如果您需要更多代码,请告诉我们。非常感谢。

2 个答案:

答案 0 :(得分:0)

方法addHtml()将提供的字符串加载为XML。这意味着它也需要是有效的XML。换句话说,你将不得不使用XHTML。

错误消息显示第1行中有link标记。link是(X)HTML中的空元素。保存为HTML,它将如下所示:

<link rel="stylesheet" type="text/css" href="style.css">
<div>Some Content</div>

由于两个原因,这不是有效的XML。这里没有根元素,但这是由addHtml()添加的,link元素未关闭,从而触发错误。

有效的XHTML片段如下所示:

<link rel="stylesheet" type="text/css" href="style.css"></link>
<div>Some Content</div>

或者这个:

<link rel="stylesheet" type="text/css" href="style.css"/>
<div>Some Content</div>

在XML中,空标记可以写为<link></link><link/>/之前的>直接关闭了开始标记。只是开头标记在XML / XHTML中无效,但在HTML中有效。

因此,您需要确保您的Blade文件是有效的XHTML片段。

答案 1 :(得分:0)

我遇到了同样的问题。我已将其修改为以下编码。

$doc = new DOMDocument();
$doc->loadHTML($str);
$doc->saveHTML();
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $doc->saveHtml(),true);
相关问题