我一直在尝试修改HTML标记元素,我有一大堆需要修改的HTML文件。
我需要删除图像之间的线条和以下文字。我正在使用PHP。我使用DOMDocument访问所有节点,我也能够获取nodepath。但是我无法从nodepath修改特定的HTML标记。有人能告诉我这是否可能? 这就是我现在所拥有的..非常感谢ppl ..
$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);
}
}
}
答案 0 :(得分:1)
...考虑任何图片,然后在图片和文字之间添加一些后续文字(
<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>
答案 1 :(得分: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;