我已获得DOMDocument
和DOMXPath
中所需的HTML数据。XPath查询和HTML - 在锚标签中查找特定的HREF
但我需要访问并检索href
值在某些<a>
标记。以下为条件:
href
包含:some-site.vendor.com/jobs/[#idnumber]/job
(即some-site.vendor.com/jobs/23094/job
)href
含有不:some-site.vendor.com/jobs/search?search=pr2
href
含有不:some-site.vendor.com/jobs/intro
href
含有不:www.someothersite.com/
href
不包含:media.someothersite.com/
href
不包含:javascript:void(0)
这两种(类似)查询获取的一切,但4-6 - 这是一件好事:
$joblinks = $xpath->query('//a[@href[contains(., "https://some-site.vendor.com/jobs/")]]');
$joblinks = $xpath->query('//a[@href[contains(., "job")]]');
然而,最终我需要访问所有的包含href像#1,一个d将实际的href值赋给一个变量/数组。下面是我在做什么:
$payload = fetchRemoteData(SPEC_SOURCE_URL);
// suppress warning(s) due to malformed markup
libxml_use_internal_errors(true);
// load the fetched contents
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML($payload);
// parse and cache the required data elements
$xpath = new DOMXPath($dom);
//$joblinks = $xpath->query('//a[@href[contains(., "some-site.vendor.com/jobs/")]]');
$joblinks = $xpath->query('//a[@href[contains(., "job")]]');
foreach($joblinks as $joblink) {
var_dump(trim($joblink->nodeValue)); // dump hrefs here!
}
echo "\n";
这是真的打我 - 我很接近,但我似乎无法正确地调整查询和/或访问实际的HREF值。我最不高兴的道歉,如果我没有遵循这个问题的任何种类的协议...
任何/所有的帮助将不胜感激! Thanx提前多少!
是否有必要筛选HREF值仅使用XPath查询?我确信这是可能的,但是我的头很痛苦(典型的XPath)。也许你可以使用'$ xpath-> query()'来获得一个与广泛模式匹配的节点列表(例如'href =“https://some-site.vendor.com/jobs/”'),然后使用几行PHP来更深入地检查每个节点的href值? – 2012-06-08 20:13:22
“XPath 1.0”而不是“XPath 1.1”肯定会造成这种不必要的冗长......但这就是我们所有的a.t.m.我会创建一个函数,它可以与['registerphpfunctions'](http://php.net/manual/en/domxpath.registerphpfunctions.php)进行正则表达式匹配。 – Wrikken 2012-07-01 11:35:40