2013-02-28 60 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);