-1

<tr><td>次のような要素が多数あるHTMLページが1つあります

<tr>
<td class="notextElementLabel width100">address:</td>
<td style="width: 100%" colspan="1" class="formFieldelement"><b>12284,CA</b></td>
</tr>

上記が4番目の位置にあるとしましょう。<tr>この要素の前にさらに3つあることを意味します<tr>

今、アドレスの値を取得したいので、やっています

$doc = new DOMDocument();
    @$doc->loadHTML($this->siteHtmlData);
    $tdElements = $doc->getElementsByTagName("td");
    $i=0;
    foreach ($tdElements as $node) {
        if(trim($node->nodeValue) == 'address:'){
            echo "\n\ngot it\n\n";
        }else{
            echo "\n\n---no ---\n\n";
        }

    }

「12284、CA」の値を取得するにはどうすればよいですか。ガイドしてください。

ありがとう

4

3 に答える 3

1

あなたの場合、クエリの背後にあるロジックは単純なので、XPath 構文で完全に表現できます。

//td[text()="address:"]/following-sibling::td/b/text()

これは<td>、 に等しいテキストを持つノードを見つけ"address:"、次の を取得し、その内部に<td>入り、そこで見つかったテキストを取得します。<b>

それはあなたができることを意味します

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
echo $xpath->evaluate('string(//td[text()="address:"]/following-sibling::td/b)');

探している結果がすぐに出力されます。

于 2012-06-21T12:40:43.700 に答える
0

nickbの答えに似た自分で答えを得ました

$tdElements = $doc->getElementsByTagName("td");
    $tdCnt  = $tdElements->length;

    for ($idx = 0; $idx < $tdCnt; $idx++) {

        if(trim($tdElements->item($idx)->nodeValue) == 'address:'){
            echo $tdElements->item($idx+1)->nodeValue;
        }
    }

それが役立つことを願っています

于 2012-06-21T12:40:56.497 に答える
0

次のように、要素を取得してから、<tr>その子を解析する必要があります。

$trElements = $doc->getElementsByTagName("tr");
foreach ($trElements as $node) {
    $children = $node->childNodes;
    foreach( $children as $child)
        echo $child->textContent; // or $child->nodeValue
}

これは以下を出力します:address: 12284,CA

ここで<tr>、アドレスではない要素がさらにある場合は$children、ノードのリストを解析して が見つかることを確認する必要があり"address:"ます。一度解析すると、次の子の値が探している値であることがわかります。

于 2012-06-21T12:34:30.627 に答える