2013-02-28 37 views
7

PHPのTidyを使用して、XMLを有効にしてからDomDocumentにロードする前に使用したいと思います。PHP Tidyは空白を削除して改行を挿入します

しかし、私は私の書式に何かを変更する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を追加することからTidyのを防ぐために、HTMLに代わる実行することができました。 sourceforge.net/docs/quickref.html#output-xml – hakre

+0

PHPの単純なHTML DOMパーサーは、ほとんどの場合よりはるかに寛大なパーサーです。 http://simplehtmldom.sourceforge.net/ – Petah

+0

@hakre '' input-xml '=> true'以外のすべての設定を削除しました(そうしないと完全なHTML文書を出力しないので必要です)。しかし、それは役に立たなかった。また '' output-xml '=> false'を設定しようとしましたが、これは役に立ちませんでした。ストリッピング/トリミングや書式設定を防ぐために何かできますか? –

答えて

2

私は解決策を見つけましたが、少しヒッヒッとしていますので、私はまだ良い提案をしています。

あなたはその後、その後、<pre>\n改行を削除し、trueに出力するHTMLが設定されたXMLを修復し、(これは空白を変更しないTidyの指示)を検証するXML周り<pre>を入れてください。

例://整頓:私の場合は

$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 = preg_replace("/\n([\s]*)\n/", "\r\n", $html);

関連する問題