2012-02-07 7 views
1

私は自分のサイトのページ(blue.php)用に構築した既存のPHPファイルを取得しようとしています。そのページの別のバージョンを作成します(blue-2.php)。xPath/DOMでコンテンツを含む/除外> PHP

私は例えば、私は属性を変更し、そして私の変更は青2.php以内に正しく反映することができ

$documentSource = file_get_contents("http://mysite.com/blue.php"); 

と私の既存の.phpファイルに引っ張っに成功してきた:

$xpath->query("//div[@class='walk']"); 
foreach ($xpath->query("//div[@class='walk']") as $node) { 
$source = $node->getAttribute('class'); 
$node->setAttribute('class', 'run'); 

私の現在のコードでは、上の例のように変更しています。私が本当にやりたいことは、新しいPHPページ(blue-2.php)に特定のdivやその他の要素が表示されないようにすることです。

私のコードの最後にecho $doc->saveHTML();を使用すると、blue.phpからのすべてがblue-2.phpの出力に含まれているように見えます。要素は、XPathで、私の新しいページに表示

は、私が(包含および除外)$documentSource = file_get_contents("http://mysite.com/blue.php");を使用してページ全体を解析し、を選択し、選択することができ

だから私の質問の本質はありますか?あるいは、私は上記のdivクラスwalk/runの例のように、既存のコードに変更を加えるだけに制限されていますか?

ありがとうございます。

+0

どの変換を行うかによって、XPathとDOMよりもXSLを使用する方がよい場合があります。 –

+0

ちょっとフランシス、コメントありがとう。 XSLがxPath/DOMよりも良い選択である理由を教えてください。既存のPHPファイルをXMLファイルに変換してから、XSLを使用するために元に戻す必要はありませんか? – rocky

+0

PHP 'DOMDocument'インスタンスを[' XSLTProcessor'](http://php.net/manual/en/class.xsltprocessor.php)で使用してください。変換ステップはありません。 XSLは「この種のものを追加/変更/削除する以外は同じものを維持する」パターン([このアイデンティティーテンプレートチュートリアル](http://xmlplease.com/xsltidentity)を参照)を非常に簡単に表現できます。ここで説明するものよりも複雑なことをしているのであれば、XSLはよりコンパクトで自然な方法かもしれません。 –

答えて

3

私はこれを試してみた、それだけでエラーをスロー:あなたはremoveDOMNodeListの方法だと思い作ったどのようなドキュメントの一部

$xpath->query("//img[@src='blue.png']")->remove(); 

?私が見つけるためにどのような感じのビットを取得するには、(BTWだけでPHP-ではありません)DOM拡張子からすべてのクラス&の機能を介してビットを閲覧することをお勧めDOMNode::removeChild

foreach($xpath->query("//img[@src='blue.png']") as $node){ 
    $node->parentNode->removeChild($node); 
} 

を使用してください。

このソリューション(余分なhttp-request、フルDOMロード&の操作)は、多くの場合、元のblue.phpのスイッチを取得して出力が異なる可能性がある場合は、それに比べて不必要なオーバーヘッド。

+0

答えWrikkenありがとうございます。私の方法はサーバー上で少し重すぎるようですが、私は同意します。元のPHPファイルのスイッチの例を教えてください。私はあなたが何を意味しているか正確には分かりません。 – rocky

+0

また、xPathを使って特定の要素を削除/除外する方法を私に教えてくれました。代わりに、元のPHPファイルの特定の要素だけを含めることは可能ですか?私にとっては、それははるかに少ないリソースを集中するように思える。 – rocky

+0

見ない?ありそうもない。しかしおそらくbleu2.php = '<?php $ is2 = true; 'blue.php';?> 'を含んでいて、' blue.php'にいくつかのif文を入れておきましょう: 'if(!$ is2){/ * echo something * /} else {/ * * /} ' – Wrikken

関連する問題