我有以下HTML:
$page = '<html>
<head>
<title>Page</title>
</head>
<body>
<div>
<div>
<div>
</div>
<div class="this one">
<h2>Ignore</h2>
<p>Text</p>
<h2>Header 1</h2>
<ul><li>List Value 1</li></ul>
<h2>Header 2</h2>
<ul><li>List Value 2</li></ul>
<h2>Ignore</h2>
<ul><li>List Value 3</li></ul>
<h2>Header 3</h2>
<ul>
<li>List Value A</li>
<li>List Value B</li>
<li>List Value C</li>
</ul>
<h2>Ignore</h2>
<p>Text</p>
</div>
</div>
</div>
</body>
</html>';
我正在尝试仅获取li
的{{1}}列表,并且以下代码不起作用;
Header 3
我期望输出:
$doc->loadHTML($page);
$xpath = new DomXPath($doc);
$nodes = $xpath->query("//div[@class='this one']/h2[.='Header 3']/ul/li");
foreach($nodes as $node) {
echo $node->nodeValue . "<br />";
}
答案 0 :(得分:3)
这是您想要的表达式:
//div[@class = 'this one']/h2[text() = 'Header 3']/following-sibling::ul[1]/li
细说:
//div[@class = 'this one']
-将文档中的所有<div>
与指定的class
属性值匹配
…/h2[text() = 'Header 3']
-匹配所有<h2>
的孩子,这些<div>
是具有指定文本内容的…/following-sibling::ul
的孩子
following-sibling
-使用<ul>
轴来匹配<h2>
之后出现的…[1]
<ul>
-仅匹配作为匹配的<h2>
的兄弟姐妹的第一个…/li
(…记住在XPath表达式中索引是基于1的)
<li>
-并匹配属于该<ul>
的子项的所有import json
MY['Stuff']=[]
for k,v in the_dictionary.items():
model = (k)
year = (v)
MY['Stuff'].append({
"Model": (model),
"Year": (year)
})
print(MY)
print(json.dumps(MY))