1

私は次のHTMLを持っています:

[...]
<div class="row clearfix">
    <div class="col1">Data</div>
    <div class="col2">Data</div>
    <div class="col3">Data</div>
    <div class="col4">Data</div>
    <div class="col5">Data</div>
    <div class="col6">Data</div>
    <div class="col7">Data</div>
    <div class="col8">Data</div>
</div><!--// row-->

<div class="row clearfix otherClass">
    <div class="col1">Data</div>
    <div class="col2">Data</div>
    <div class="col3">Data</div>
    <div class="col4">Data</div>
    <div class="col5">Data</div>
    <div class="col6">Data</div>
    <div class="col7">Data</div>
    <div class="col8">Data</div>
</div><!--// row-->

<div class="row clearfix thirdClass">
    <div class="col1">Data</div>
    <div class="col2">Data</div>
    <div class="col3">Data</div>
    <div class="col4">Data</div>
    <div class="col5">Data</div>
    <div class="col6">Data</div>
    <div class="col7">Data</div>
    <div class="col8">Data</div>
</div><!--// row-->
[...]

これらのすべての div を HTML から取得したいのですが、それらはすべてクラスとして "row clearfix" で始まりますが、さらに多くのデータを含めることができます。その後、各列を個別に処理できるようにしたいので、col1、col2、col3 ect の値を取得します。

私はこのコードを書きましたが、今行き詰まっています。誰かが私を助けることができますか?

        $oDom = new DOMDocument();
        $oDom->loadHtml($a_sHTML);

        $oDomXpath = new DOMXpath($oDom);
        $oDomObject = $oDomXpath->query('//div[@class="row clearfix"]');

        foreach ($oDomObject as $oObject) {
            var_dump($oObject->query('//div[@class="col1"]')->nodeValue);
        }



更新*解決策*
以下の返信のおかげで、次のコードで動作するようになりました。

    $oDom = new DOMDocument();
    @$oDom->loadHtml($a_sHTML);

    $oDomXpath = new DOMXpath($oDom);
    $oDomObject = $oDomXpath->query('//div[contains(@class,"row") and contains(@class,"clearfix")]');

    foreach ($oDomObject as $oObject) {
        foreach($oObject->childNodes as $col)
        {
            if ($col->hasAttributes())
            {
                var_dump($col->getAttribute('class') . " == " . trim($col->nodeValue));
            }
        }
    }
4

1 に答える 1

2

外側のdivに一致させるには、必要なのは

//div[starts-with(@class,"row clearfix")]

また

//div[contains(@class,"row clearfix")]

また

//div[contains(@class,"row") and contains(@class,"clearfix")]

クラス名は任意の順序である可能性があるため、最後のものを選びます。

inner で何をしたいのかは 100% わかりませんが、次のdivような方法で取得できます。

div[starts-with(@class,"col")]
于 2012-03-28T14:52:38.883 に答える