0

ドキュメントにはいくつかのタイプがあり<a>ます。属性が「more data ...」というテキストで始まるものだけ<a>を選択したいtitle<a title="more data *">

たとえば、以下のマークアップでは、1 番目と 2 番目の を選択したいのです<a>が、3 番目titleは で始まっていないmore dataためスキップし、4 番目<a>は title 属性すら持っていないためスキップします。

<a title="more data some text" href="http://mypage.com/page.html">More</a>
<a title="more data other text" href="http://mypage.com/page.html">More</a>
<a title="not needed" href="http://mypage.com/page.html">Not needed</a>
<a href="http://mypage.com/page.html">Not needed</a>

DOMXPath を使用しています。私のクエリはどのように見えますか?

$xpath = new DOMXPath($doc);
$q = $xpath->query('//a');
4

1 に答える 1

1

次のようなクエリを使用できます。

//a[starts-with(@title, "more data ")]

属性の値が指定された文字列で始まる必要があるような述語を使用します。title


$doc = new DOMDocument;
$doc->loadXML('<example>
<a title="more data some text" href="http://mypage.com/page.html">More</a>
<a title="more data other text" href="http://mypage.com/page.html">More</a>
<a title="not needed" href="http://mypage.com/page.html">Not needed</a>
<a href="http://mypage.com/page.html">Not needed</a>
</example>');

$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[starts-with(@title, "more data ")]');

echo "Found {$links->length} links", PHP_EOL;
foreach ($links as $link) {
    echo $link->getAttribute('href'), PHP_EOL;
}

上記の例を online で実行しています。

于 2012-11-28T23:01:43.327 に答える