如何通过嵌套在XPath其他元素中的CSS类找到元素?
问题描述:
我想提取复杂选择器中的所有链接,如 - .timestream .ui-ContentBottom h1 a
。我知道如何与像像a
只是一个单一的选择简单的链接做到这一点:如何通过嵌套在XPath其他元素中的CSS类找到元素?
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a/@href');
foreach($nodes as $href) {
echo $href->nodeValue;
}
我是新来的XPath所以任何帮助,将不胜感激。
答
以下XPath表达式应该为你工作:
//*[contains(@class, "timestream")]//*[contains(@class, "ui-ContentBottom")]//h1//a/@href
的这里的问题是,XPath不具有天然class
选择。换句话说,contains(@class, "smth")
与.smth
不完全相同,但实际上,它通常用于匹配多值类属性值中的单个类。另请参见:
答
xpath可以让你搜索一个文件,如XML或HTML文件。
xpath不会显示路径中的类,但会显示带有@
符号的ID。
xpath可以通过几种方式获得。 Chrome中的一种方式是查看元素的来源,右键单击它并单击Copy XPath
。
当我这样做对textarea的盒子,我在回答这个问题之前,我收到以下XPath ::
//*[@id="wmd-input"]
不要让,虽然迷惑你。这里是一个更简单的例子
/html/body
这是body元素的xpath。
我写了一个小函数,可以帮助您将xpaths转换为元素。
function xpath(path){
for (var found, x = document.evaluate(path, document, null, XPathResult.ANY_TYPE, null), result = []; found = x.iterateNext();) {
result.push(found);
}
return result;
}
此功能产生针对该文本区域::
xpath('//*[@id="wmd-input"]');
[<textarea id="wmd-input" class="wmd-input processed" name="post-text" cols="92" rows="15" tabindex="101" data-min-length></textarea>]
运行它时,现在,你有元素,你可以修改它这样的例子如下:
var test = xpath('/html/body');
test[0].innerHTML='bye';
请你提供一个链接,我可以阅读有关使用复杂xPath查询的更多信息?谢谢:) –
@SanJeetSingh不能回忆任何具体的东西,只是谷歌搜索XPath教程,练习和练习更多!乐意效劳。 – alecxe