GetElementsByTagName替代DOMDocument

时间:2012-05-20 04:27:22

标签: php domdocument

我正在使用DOMDocument创建一个HTML文件,但是在使用getElementsByTagName方法搜索时遇到了问题。我发现,因为我正在生成热,所以无法识别我插入的标签。

我尝试使用DOMXPath,但无济于事:S

现在,我要做的就是遍历一个节点的所有子节点并存储在一个数组中,但是我需要转换那个得分DOMNodeList,并且在做

return (DOMNodeList) $ my_array;

生成语法错误。

我的具体问题是,如何使用getElementsByTagName方法搜索标签或我可以提供的其他替代方案来实现任务?

回顾我当时正在生成的DOMDocument。

如果您需要更多信息,我很乐意将其置于问题中。

当然Jonathan Sampson。

我为编辑问题道歉。我对这个论坛格式不太了解。

为了更好地理解我所做的事情,我把继承链。

我有这个基类

abstract class ElementoBase {
    ...
}

我有这个继承自前一个类的类,带有一个抽象函数insert(insert)

abstract class Elemento extends ElementoBase {
    ...
    public abstract function insertar ( $elemento );
}

然后我有一系列代表从上面继承的HTML标记的类,即

class A extends Elemento {
}
...

现在我用来在论文中插入标签的代码如下:

public function insertar ( $elemento ) {

$this->getElemento ()->appendChild ( $elemento->getElemento () );
}

函数getElemento(),返回DOMElement

此外,在插入元素之前,请执行一些依赖于要插入的HTML标记的验证, 因为它们都有非常具体的规格。

由于我同时生成HTML代码,很明显没有HTML文件。

对于你的问题,理论告诉我这样做:

$myListTags = $this->getElemento ()->getElementsByTagName ( $tag );

但我总是返回null,所以我研究了它,因为我没有加载HTML文件,因为如果我

$myHtmlFile = $this->getDocumento ()->loadHTMLFile ( $filename );
$myListTags = $myHtmlFile->getElementsByTagName ( $etiqueta );

我确实返回了HTML标签列表

如果您需要更多信息,我很乐意将其置于问题中。

2 个答案:

答案 0 :(得分:0)

我假设您已经使用DOMDocument创建了一个有效的HTML文件。您的基本问题是解析或搜索HTML文档中的特定标记名称。 要搜索HTML文件,PHP中提供的最佳解决方案是Simple HTML DOM parser

您只需运行以下代码就可以了!

$html = file_get_html('url to your html file');

foreach($html->find('tag name') as $element) 
{
// perform the action you want to do here.
// example: echo $element->someproperty;

}     

答案 1 :(得分:0)

$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->appendChild(
    $doc->createElement('Filiberto', 'It works!')
);

$nodeList = $doc->getElementsByTagName('Filiberto');

var_dump($nodeList->item(0)->nodeValue);