2

HTMLタグ要素を変更しようとしていますが、変更が必要なHTMLファイルの膨大なリストがあります。

画像と次のテキストの間の線を削除する必要があります。私はPHPを使用しています。DOMDocumentを使用してすべてのノードにアクセスしており、ノードパスを取得することもできます。しかし、ノードパスからその特定のHTMLタグを変更することはできません。これが可能かどうか誰かに教えてもらえますか?これは私が今持っているものです..どうもありがとうございました。

$dom = new DOMDocument();
$dom->loadHTMLFile($pathname);
$i=0;
$allNodes = $dom->getElementsByTagName('*');
$tagNamesArray = array();
foreach($allNodes as $node) {
$tagNodePath = $node->getNodePath();
$tagName = end(explode('/',$node->getNodePath()));
$tagNamesArray[$i][1] = $tagName;
$tagNamesArray[$i][2] = $tagNodePath;
$i++;
}

checkForLines($tagNamesArray, $dom);

function checkForLines($tagsArray, $dom) {
$xPath = new DOMXpath($dom);
for($i=0 ; $i<(count($tagsArray)-1) ; $i++) {
    if($tagsArray[$i][1] == 'img' && $tagsArray[$i+1][1] == 'br') {
        echo $tagsArray[$i+1][2].'<br>';
        $lineTag = $xPath->query($tagsArray[$i+1][2]);
        $domElement = $dom->removeChild($lineTag);
    }
}
}
4

2 に答える 2

3

...任意の画像を検討し、その後に画像とテキストの間に続くテキスト(それ<p>など<h1>...)を<br>削除したいタグがあります...

これがあなたがしたいすべてであるならば:

$dom = new DOMDocument;
$dom->loadHTML( "<img src='foo.png' /><br/><p>Hello World</p>" );

$img = $dom->getElementsByTagName("img");

foreach ( $img as $current ) {
    $sibling = $current->nextSibling;
    if ( $sibling->nodeName === "br" )
        $current->parentNode->removeChild( $sibling );
}

echo $dom->saveHTML();

その結果、次の出力が得られます。

<img src="foo.png"><p>Hello World</p>
于 2012-05-18T15:33:54.480 に答える
0

文字列からDOMを作成する

$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html;
于 2017-12-02T15:15:33.017 に答える