[英]manipulate html navigation with php dom
我需要向自定义CMS中的函数输出的导航HTML添加类。
获得所需输出的唯一方法是使用PHP解析HTML。
我正在使用PHP的DOM方法浏览HTML,并向包含子<ul>
任何<li>
元素添加一个类(顶级导航项)。
到目前为止,它正在运行,但是我有两个问题:
我有没有更有效的方法来浏览此DOM数据? 对我来说似乎很麻烦,但这可能只是我缺乏经验。
在某些情况下,我的<li>
元素可能已经有一个类,如何在不破坏可能存在或可能不存在的情况下添加到现有的class属性中?
--
<?
$mcms_nav = getContent(
// call to cms that returns navigation html as a string
// ex. <ul id="pnav"><li><a href="/">home</a></li>....</ul>
);
$dom = new DOMDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->loadHTML($mcms_nav);
$x = new DOMXPath($dom);
foreach($x->query('//ul/li/ul') as $node)
{
$parent = $node->parentNode;
$parent_attr = $dom->createAttribute('class');
$parent_attr->value = 'has-flyout';
$parent->appendChild($parent_attr);
$flyout_attr = $dom->createAttribute('class');
$flyout_attr->value = 'flyout';
$node->appendChild($flyout_attr);
}
$mcms_nav = $dom->getElementByID('pnav');
echo $dom->saveHTML($mcms_nav);
?>
并不是的。 您可以从CakePHP框架中获取XML类,将其转换为数组,操纵该数组,然后将其返回。 不知道这是否是您的选择。 http://book.cakephp.org/2.0/en/core-utility-libraries/xml.html
您可以使用dom->hasAttribute()
和dom->getAttribute()
来获取现有属性内容(如果存在)。
另外,新工作不会有伤害;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.