使用SimpleXML填充HTML文件

时间:2014-04-24 11:11:38

标签: php

我有一个包含这样的内容的数组:

    $content = array(
        array(
            'classname' => 'nopadding',
            'idname'    => 'car-volvo',
            'title' => 'Volvo'
        ),
        array(
            'classname' => 'nomargin',
            'idname'    => 'car-porsche',
            'title' => 'Porsche'
        )
    );

我有一个HTML文件,作为包含以下内容的模板:

    <li data-tpl-classname="class" data-tpl-idname="id"><span data-tpl-title="innerHTML"></span></li>

现在我想将数组与HTML文件一起使用来生成:

    <li class="nopadding" id="car-volvo"><span>Volvo</span></li>
    <li class="nopadding" id="car-volvo"><span>Volvo</span></li>

我正在编写一个通用函数,它接受上面的HTML文件,查找data-tpl-属性并填充数组中的内容。

我怎样才能做到这一点? SimpleXML是可行的吗?

1 个答案:

答案 0 :(得分:1)

我已经尝试尽可能地推广它,但不能保证这适用于所有模板,我需要看看它们以查看它们的共同模式。

您可以尝试代码:

populate_html($template,$content,'li','data-tpl-');

function populate_html($template,$content,$tag_name,$attr_name){
    $dom = new DOMDocument;
    $dom->loadHTML($template);
    $i=0;
    $tag = $dom->getElementsByTagName($tag_name)->item(0);
    foreach($content as $k=>$v){

        $li = "<".$tag_name;
        foreach ($tag->attributes as $attr) {
            if(stripos($template,$attr_name)!==FALSE){
                $attr_short = substr($attr->nodeName,strrpos($attr->nodeName,'-')+1,strlen($attr->nodeName));
                $li .= ' '.$attr->nodeValue.'="'.$content[$i][$attr_short].'"';
            }
        }
        $li .= "><span>".$content[$i]['title']."</span></".$tag_name.">";
        $i++;
        echo $li;
    }
}

DOMDocument是一个类,它会将包含HTML的字符串分解为您传递给其属性和值的字符串,以便您可以解析它们。

<强> Demo