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ラベルを含むオブジェクトであり、2番目の子は<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 に答える