簡體   English   中英

XPath:在節點集上使用字符串函數?

[英]XPath: Using string functions on a node-set?

我想知道是否可以在節點集上使用字符串函數 - 特別是XPath 1.0中的'substring()'函數。

我正在抓取詳細信息的頁面有一個包含5個URL的節點集,這些URL通過以下XPath位置路徑返回:

//div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href

遺憾的是,網址采用“//www.example.com”格式 - 我需要采用“www.example.com”格式(不含前導斜杠)。 我努力了:

substring(//div[@class='example example-1']/a[not(contains(div,'Sold'))]/@href, 3)

但是,這只返回1個結果。 我需要所有5個返回沒有前導斜杠。 我的猜測是你不能在節點集上使用這種字符串函數,但希望有人可以闡明這一點,並幫助我實現我想要的結果,拜托?

如果有其他方法可以達到相同的結果,那么我也是耳朵。

謝謝

無法使用純XPath 1中的函數處理任意列表或節點集的每個項目,因此您需要下拉到使用XPath的主機語言來分別處理不同的節點並調用子字符串函數來自主語的每個項目(例如XSLT <xsl:for-each select="/div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href"><xsl:value-of select="substring(., 3)"/></xsl:for-each> )。

在XPath 2及更高版本中你可以使用函數調用或最后一步例如/div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href/substring(., 3)或者使用for .. return表達式,例如for $href in /div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href return substring($href, 3)但純XPath 1中沒有這樣的選項。

當然,如果您知道有五個項目,那么根據您使用XPath(主機語言或工具)的方式,您可以使用五個路徑表達式,例如substring((/div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href)[1], 3)substring((/div[@class='titles cf']/a[not(contains(div,'Sold'))]/@href)[2], 3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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