根据属性内容选择DOM元素

时间:2012-11-28 22:58:02

标签: php dom xquery domdocument

我的文档中有几种<a>类型。我只想选择其<a>属性以文字&#34开头的title;更多数据......&#34;比如<a title="more data *">

例如,如果给出下面的标记,我想选择第一个和第二个<a>,但跳过第三个,因为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');

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

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

使用predicatetitle属性的值必须start with指定的字符串。


示例

$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;
}

here's the above example running online