我有一个多级列表,例如:
<ul>
<li>Test column 01
<ul>
<li>Test column 02
<ul>
<li>Test column 03
<ul>
<li>Test column 04
<ul>
<li>Test column 05</li>
<li>Test column 05</li>
<li>Test column 05</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
我想运行一些PHP代码,将列表输出为csv文件,格式如下:
Test column 01
,Test column 02
,,Test column 03
,,,Test column 04
,,,,Test column 05
,,,,Test column 05
,,,,Test column 05
基本上,我希望能够通过一些php代码运行一个html列表(具有无限量的级别),并输出一个可以在excel中打开的csv文件,保留列中的列表级别。
如果我能找到一种方法为每个列表项添加一个类,取决于它的级别,所以第一级列表项获得level1,第二级,level2类等等,那么它应该相当简单找到并替换其余部分。
任何想法/帮助都非常感激。
答案 0 :(得分:2)
这适用于您的示例HTML:
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('li') as $li) { // #1
printf(
'%s%s%s',
str_repeat(',', get_depth($li)), // #2
trim($li->childNodes->item(0)->nodeValue), // #3
PHP_EOL
);
}
function get_depth(DOMElement $element)
{
$depth = -1;
while ( // #4
$element->parentNode->tagName === 'li' ||
$element->parentNode->tagName === 'ul'
) {
if ($element->parentNode->tagName === 'ul') { // #5
$depth++;
}
$element = $element->parentNode;
}
return $depth;
}
商标说明: