我有一个包含这样的内容的数组:
$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是可行的吗?
答案 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 强>