2013-02-28 29 views
7

我想在使用PHP Tidy将它加载到DomDocument之前确保我的xml有效。PHP 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

的http://整洁。 sourceforge.net/docs/quickref.html#output-xml – hakre 2013-03-01 08:53:22

+0

PHP简单的HTML DOM解析器比大多数解析器更宽松。 http://simplehtmldom.sourceforge.net/ – Petah 2013-03-01 08:54:45

+0

@hakre我删除了除'input-xml'=> true'之外的所有设置(因为否则它会输出完整的HTML文档)。但是,它没有帮助。另外我试着设置''output-xml'=> false',但这没有帮助。可以做任何事情来防止剥离/修剪和格式化? – 2013-03-01 19:57:51

回答

2

我发现了一个解决方案,但它有点骇人听闻,所以我仍然对更好的建议持开放态度。

<pre>各地要验证XML(该指示整洁不改变空格),然后进行修复与输出HTML设置为true,XML,然后取出<pre>\n换行符。

例子:

$config = array(
    'indent' => false, 
    'indent-attributes' => false, 
    'output-html' => true, 
    'input-xml' => true, 
    'wrap' => 0, 
    'vertical-space' => false, 
    'new-inline-tags' => 'context,abr,stress', 
    'new-blocklevel-tags' => 'def,ex,examples' 
); 

$tidy = new tidy(); 
$inputXml = "<pre>" . $inputXml . "</pre>"; 
$validXml = $tidy->repairString($inputXml, $config, 'utf8'); 
$cleanXml = str_replace("\n", "", $validXml); 
$cleanXml = substr($cleanXml, strlen("<pre>"), strlen($cleanXml)); 
$cleanXml = substr($cleanXml, 0, strlen($cleanXml)-strlen("</pre>")); 
0

就我而言,我是能够运行在HTML中的替换删除多个空行,防止整理从将休息$html = preg_replace("/\n([\s]*)\n/", "\r\n", $html);