簡體   English   中英

使用XPath獲取頁面上兩組的所有交集

[英]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,您可以創建一個映射,一個關鍵的映射,如dst100003pre緊跟在相關元素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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM