2

我有以下正在解析的 HTML:

<ul class="man">
   <li>
      height
       <span>3.3"</span>
    </li>
    <li>
       weight
       <span>45kg</span>
    </li>
    <li>
       date born
       <span>1/12/1979</span>
    </li>

 </ul>

我正在使用下面的代码来解析上面的 HTML:

foreach($xpath->query("//ul[@class='man']/li") as $element)
{
       echo $element->nodeValue;

}

但是代码返回内部<li></li>作为高度 3.3" 和重量 45kg 的整个东西,而我需要这两个单独的作为标签的高度和 3.3" 作为值,与标签相同的重量和 45kg 作为值。

我可以使用 "//ul[@class='man']/ul/span" 实现第二个价值,但无法在单独的变量中获取标签。

有什么想法可以解决这个问题吗?

PS:无法更改标签值,因为它们来自 HTML 页面中的服务器。

4

1 回答 1

1

您可以遍历<li>的孩子,其中第一个是DOMText包含(例如)height标签的对象,第二个将是<span> DOMElement对象:

$data = array();

foreach ($xpath->query("//ul[@class='man']/li") as $element) {

    foreach ($element->childNodes as $child) {
        $content = trim($child->nodeValue);

        if ($child instanceof DOMText && $content != '') {
            $key = $content;
        } elseif ($child instanceof DOMElement && $child->tagName == 'span') {
            $value = $content;
        }
    }

    if ($key !== null && $value !== null) {
        $data[$key] = $value;
    }
}
于 2013-02-13T14:00:02.780 回答