[英]Get all intersections of two sets on the page using XPath
這個問題的跟進-Xpath。 如何選擇兩個標簽之間的所有文本?
我可以像這樣從一個相交之間獲取文本-
response.xpath('//pre[preceding-sibling::a[@name="dst100030"] and following-sibling::a[@name="dst100031"]]//text()')
該頁面上有此類交集的列表,我需要從每個交集之間獲取文本。 使用xpath有這樣的選擇嗎?
還是我應該創建一個所有@name值的列表,並將它們替換為先后的兄弟姐妹?
我不認為“集合的交集”是表征此問題的准確方法。 我將其描述為“划分序列”。
您沒有說要尋找什么樣的結果,但是從表面上看,它是一個序列序列,並立即發出問題信號,即XPath中沒有序列序列之類的東西數據模型-至少要等到引入陣列的XPath 3.1才能使用。
您沒有說出您感興趣的XPath版本,但是標記了問題“ Python”的事實表明它可能是XPath 1.0。 如果是這樣,那么我認為最好的解決方案幾乎是肯定的是將整個輸入序列拉入Python並在那里進行分區。
FWIW而言,XPath 3.1,您可以創建一個映射,一個關鍵的映射,如dst100003
的pre
緊跟在相關元素a
元素有:
map:merge(for $a in child::a
return map{$a!@name,
$a!following-sibling::pre[preceding-sibling::a[1] is $a]})
但是,它可能具有O(n ^ 2)性能,並且使用XQuery 3.1 group-by(或XSLT for-each-group)的解決方案幾乎肯定會表現更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.