使用PHP计算服务器端<ul>中<li>标签的数量</ul> </li>

时间:2010-04-05 06:21:44

标签: php html

我有一个&lt; ul&gt;有些&lt; li&gt;(s)。我想计算这些&lt;的数量。 li>在服务器端。如果这个数字符合给定条件,那么我想添加更多&lt;李&GT;这个元素&lt; UL取代。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

首先使用php's DOM module和XPath

的简单示例
$s = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><title>...</title></head><body>
  <ul>
    <li>1</li><li>2</li>
  </ul>
  <ul>
    <li>1</li><li>2</li><li>3</li>
  </ul>
  <ul>
    <li>x</li><li>y</li>
  </ul>
</body></html>';

$doc = new DOMDocument;
$doc->loadhtml($s);
$xpath = new DOMXPath($doc);

foreach( $xpath->query('//ul[ count(li)<3 ]') as $ul ) {
  $li = $doc->createElement('li', 'abc...xyz');
  $ul->appendChild($li);
}

echo $doc->savehtml();

然后是一个过于简单的例子,我的意思是“而且该功能也不能包括额外的数据?”

echo firstFunction(array('a'), 'secondFunction');

function firstFunction($arrData, $fnFill=null) {
  $rv = '';
  $counter = 0;
  foreach($arrData as $e) {
    $counter += 1;
    $rv .= '<li>'.htmlspecialchars($e).'</li>';
  }

  if ( 4 > $counter && !is_null($fnFill)) {
    // oh no. Not enough elements. Let's call $fnFill(), it provides some filler material
    $rv .= $fnFill();
  }
  return $rv;
}

// providing extra li elements
function secondFunction() {
  return '<li>x</li><li>y</li><li>z</li>';
}

答案 1 :(得分:0)

使用PHP的DOM library,或查找Simple DOM Parser。它们都具有您在问题范围内操作和搜索HTML所需的一切