PHP:删除包含给定类或ID的所有标记

时间:2013-02-15 23:56:18

标签: php html html-parsing

我需要一些帮助。我已经研究过正则表达式,但还没有完全理解它的实现。如果父级包含给定的类或ID,我需要一个将删除所有标签及其子节点的代码段。

示例:

<?php

function remove_tag($find="",$html)
{
    # Remove multiple #IDs and classes at once

    # When given a string (separating objects with a comma)
    if (is_string($find))
    {
        $objects = explode(',', str_replace(' ', '', $find);
    } else if (is_array($find)) {
        $objects = $find;
    }

    foreach ($objects as $object)
    {
        # If ID
        if (substr($object,0,1) == '#')
        {
            # regex to remove an id
            # Ex: '<ANYTAG [any number of attributes] id='/"[any number of ids] NEEDLE [any number of ids]'/" [any number of attributes]>[anything]</ENDTAG [anything]>'

        }

        if (substr($object,0,1) == '.')
        {
            # remove a class
            # Ex: '<ANYTAG [any number of attributes] class='/"[any number of classes] NEEDLE [any number of classes]'/" [any number of attributes]>[anything]</ENDTAG [anything]>'
        }

        # somehow remove it from the $html variable?
    }
}

对不起,如果这是一个新手问题,谢谢你的时间! :)

-Pat

1 个答案:

答案 0 :(得分:2)

您可以使用XPath代替正则表达式来查找要删除的文档中的所有元素。

DOMDocumentXPath对我来说似乎是个好开始。

您可以使用DOMNode::removeChild()方法删除子项,使用DOMXPath类来评估XPath,以获取需要删除的节点。