亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

XPath中是否有“ if -then-else”語句?

XPath中是否有“ if -then-else”語句?

尚方寶劍之說 2019-12-04 11:19:39
似乎可以使用xpath中所有豐富的功能來執行“ if”操作。但是,我的引擎一直堅持“沒有這樣的功能”,而且我在網上幾乎找不到任何文檔(我發現了一些可疑的資源,但是它們的語法沒有用)我需要從字符串的末尾刪除“:”(如果存在),所以我想這樣做:if (fn:ends-with(//div [@id='head']/text(),': '))            then (fn:substring-before(//div [@id='head']/text(),': ') )            else (//div [@id='head']/text())有什么建議嗎?
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

是的,在XPath 1.0中有一種方法可以做到:


concat(

  substring($ s1,1,number($ condition)*字符串長度($ s1)),

  substring($ s2,1,number(not($ condition))*字符串長度($ s2))

這依賴于兩個互斥字符串的串聯,如果條件為false(0 * string-length(...)),則第一個為空,如果條件為true,則第二個為空。這被稱為“貝克爾方法”,歸因于奧利弗·貝克爾。


在您的情況下:


concat(

  子串(

    substring-before(// div [@ id ='head'] / text(),':'),

    1, 

    數(

      結尾為(// div [@ id ='head'] / text(),':')

    )

    * string-length(substring-before(// div [@ id ='head'] / text(),':'))

  ),

  子串(

    // div [@ id ='head'] / text(), 

    1, 

    編號(不(

      結尾為(// div [@ id ='head'] / text(),':')

    ))

    *字符串長度(// div [@ id ='head'] / text())

  )

雖然我會嘗試擺脫"//"以前的所有情況。


同樣,有可能//div[@id='head']返回多個節點。

請注意,使用//div[@id='head'][1]更具防御性。


查看完整回答
反對 回復 2019-12-04
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

根據pkarat的法律,您可以在1.0版中實現條件XPath。


對于您的情況,請遵循以下概念:


concat(substring-before(your-xpath[contains(.,':')],':'),your-xpath[not(contains(.,':'))])

這肯定會起作用??纯此趺催\作。給出兩個輸入


praba:

karan

對于第一個輸入:它包含的:條件為true,字符串before : 將作為輸出,比如說praba您的輸出。第二條件為假,因此沒有問題。


對于第二個輸入:它不包含,:因此條件失敗,到第二個條件時,字符串不包含,:因此條件為true ...因此karan將拋出輸出。


最后,你的輸出會praba,karan。


查看完整回答
反對 回復 2019-12-04
  • 3 回答
  • 0 關注
  • 1196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號