我想使用PHP Tidy来确保我的xml在加载到DomDocument之前有效。
但是,我不想让Tidy改变我的格式 - 我只希望它能修复像不平衡标签等问题。
可以在此页面看到问题的一个示例:http://www.tek-tips.com/viewthread.cfm?qid=1654452
我自己的例子如下。
输入:<ex><context>собр<stress>а</stress>ние</context> акцион<stress>е</stress>ров — <stress>aa</stress>ndeelhoudersvergadering</ex>
(已经是有效的xml)
预期输出:<ex><context>собр<stress>а</stress>ние</context> акцион<stress>е</stress>ров — <stress>aa</stress>ndeelhoudersvergadering</ex>
(</context>
和актион
之间有空格。
实际输出:
<ex>
<context>собр
<stress>а</stress>ние</context>акцион
<stress>е</stress>ров —
<stress>aa</stress>ndeelhoudersvergadering</ex>
(它删除了</context>
和актион
之间的空格,这将使文字无法读取,并在每个标记后插入换行符)
我的代码是:
function TidyXml($inputXml)
{
$config = array(
'indent' => false,
'output-xml' => true,
'input-xml' => true,
);
$tidy = new tidy();
$tidy->parseString($inputXml, $config, 'utf8');
$tidy->cleanRepair();
$cleanXml = tidy_get_output($tidy);
return $cleanXml;
}
我尝试更改了几个选项,但没有成功。
答案 0 :(得分:2)
我找到了一个解决方案,但它有点骇人听闻,所以我仍然愿意接受更好的建议。
将<pre>
放在要验证的xml周围(这指示Tidy不要更改空格),然后修复输出-html设置为true的xml,然后删除<pre>
和{{ 1}}换行符。
示例:
\n
答案 1 :(得分:0)
就我而言,我能够在html上运行替换以删除多个空行并阻止Tidy添加中断$html = preg_replace("/\n([\s]*)\n/", "\r\n", $html);