С nokogiri легко получить абсолютный путь от любого узла до корня, просто позвонив node.path
. Возьмем такой пример:Простейший способ получить xpath между двумя узлами
<bookstore>
<department category="COOKING">
<book>
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book>
<title lang="en">Nice meals</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</department>
<department category="WEB">
<book>
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</department>
</bookstore>
Если бы я сделал
tree.search("//title[text() = 'Learning XML']").first.path
Я хотел бы получить что-то вроде bookstore/department[2]/book[1]/title[1]
Теперь, что если бы я хотел, чтобы получить путь к этому узлу, но вместо того, чтобы с корнем , Я хотел получить его, например //department[@category='WEB']
и вплоть до одного и того же узла заголовка?
Иными словами. Как я могу получить/генерировать путь между двумя известными узлами, такими как //department[@category='WEB']
, до bookstore/department[2]/book[1]/title[1]
?
EDIT
Я думал о том, какой способ превращения //department[@category='WEB']
в новый вид «корня», например, путем удаления чего-либо, а затем снова использовать метод .path
на узле заголовка. Это, кажется, не очень «простой, хотя» ...
вы пробовали 'дерево .xpath ("// department [@ category = 'WEB']/book [1]/title [1]") '? – Abdo
Хе-хе, это результат, но я хочу, чтобы он смог сгенерировать этот результат программно из знания двух узлов // department [@ category = 'WEB'] и книжного магазина/отдела [2]/book [1]/title [1] –
Поскольку у вас всегда есть одна и та же структура, '' // department [@ category = 'WEB']/"+" книжный магазин/отдел [2]/book [1]/title [1] ". split ("/"). drop (2) .join ("/") ' – Abdo