3

SimpleHTMLDOMパーサーはHTMLパーサーにとって本当に悪い選択だと多くの人が考えていることを私は知っています。それでも今は使う必要があります。

1つの要素につき2つ以上の属性で検索する方法が説明されている記事をいくつか読みました。彼らはそのようなものと配列フィルタリングの1つの可能性を提案しました

foreach ( tag[attr1=value] as tag1 )
{
   foreach ( tag[attr2=value] as tag2 )
   {
      // print tag2[attr1=value,attr2=value]
   }
}

私の質問は、2つの属性によってパーツを見つけるためのネイティブの可能性についてです。マニュアルには見つかりませんでしたが、すべてがマニュアルに記載されているわけではありません。

誰かがそのような方法または類似tag2[attr1=value,attr2=value]またはtag2[attr1=value attr2=value]またはなどがあることを知っていますか?

4

5 に答える 5

1
$doc      = new DOMDocument();
@$doc->loadHTML( $html );
$xpath    = new DOMXpath( $doc );
$elements = $xpath->query( "//*/div[@class='name'][@id='someId']" );  

if ( $elements->length > 0 )
{
    foreach ( $elements as $index => $node )
    {
        //get node detail here
    }
}
于 2011-04-29T21:57:46.383 に答える
1

私が見るように、現時点ではそれを行う方法はありません。このスクリプトの作成者、またはこのプロジェクトの開発を継続する意思のある他の開発者が編集する必要があります。ライセンスがそれを許可するかどうかわからない。

于 2011-05-03T10:23:01.073 に答える
1

おそらく8年後、彼らは更新されたバージョンを思いついたでしょう。

複数の属性を持つ単純なHTMLDOMパーサーを使用するには、

foreach($dom->find('tag[attr1][attr2]') as $stuff){
    echo $stuff;
}
于 2019-11-13T01:22:42.000 に答える
0

これまでSimpleHTMLDOMパーサーを使用したことはありません。しかし、そのホームページにはjQueryの方法で機能すると書かれているので、試してみてくださいtag[attr1=value][attr2=value]jQuery:Multiple Attribute Selector

于 2011-04-09T10:50:40.293 に答える
0

simple_html_domを調べたことがわかる限り、探している機能を実現するには、ネストされたforeachループ以外の方法はありません。の組み込みサポートはありませんtag[attr=val][attr2=val]

さらに、各セレクターは、返されたノードに追加するためだけに機能し、ノードから削除することはありません。そのためtag.class[attr=val] or tag#id[attr=val]、回避策として試したようなもので、同様の機能を模倣していました。

同様に、私は試し$html->find("div[attr=val]")->find("div[attr2=val2]")ましたが、Simple HTML DOMが新しいツリーオブジェクトではなくノードの配列を返し、チェーンを不可能にするため、これも失敗しました。

最善の方法は、質問に投稿した方法です。

于 2011-05-05T07:22:04.403 に答える