【发布时间】:2023-03-31 02:15:01
【问题描述】:
如何选择 2 个已知 XPath 之间的所有 DOM 节点?
Xpath1 = html/body/div[2]/p
Xpath2 = html/body/div[2]/p/a[3]
DOM 结构:
<html>
<body>
<div id="id3">
<p id="p3">
text1
<a href="#">
goal
</a>
text2
<a href="#">
Crowdrise
</a>.
</p>
</div>
</body>
</html>
解析器:
$dom = new DOMDocument();
$dom->loadHTML($domain);
$x = new DOMXPath($dom);
$el = $x->query("....??");
所以,基本上是在寻找一种查询方法来选择两个 XPath 之间的所有节点。 我看到了几个类似的问题,但它们似乎与 XSLT 案例有关。
【问题讨论】:
-
between是什么意思?如果你在一棵树上选择 2 个树枝,哪些树枝是between?此外,XSLT 使用 XPath 作为其表达式语言,因此这些答案可能适用。 -
XPath 中没有分支。一切都是一个节点。如果您有 20 个节点并选择 7 和 15,则需要一种方法来选择节点 7-15(包括)
-
XPath 是一种树寻址语言,树的概念就是分支的概念。您将如何订购这些节点 1..20,确切地说?这就是我的意思:如果我采用“中间的所有节点”,我必须知道从一个节点到另一个节点的路径。从最深的节点开始,我会上升一步(父节点),然后环顾四周,看看另一个节点是否是兄弟节点。但是,如果必须的话,你不会在任何树中的任何两个节点之间找到一条这样的路径,而不需要递归(下降到兄弟节点)。
-
在您的示例中,
Xpath1和Xpath2之间没有节点。后者是前者的直系子代。或者,如果包含开头和结尾,则路径 为Xpath1, Xpath2. -
让我更困惑的是,发布的 HTML 与 xpath 示例不对应,即 HTML 中的任何地方都没有
div[2]和a[3]
标签: php html dom xpath domparser