我需要的東西似乎不匹配類似標題的其他文章。XPath 1.0獨佔或節點集表達式
我需要,使用Xpath 1,能夠按照該順序切入地獲取節點a或節點b。 也就是說,節點a如果存在,否則節點b。
XPath表達式,如:
expression | expression
會讓我都在的情況下,他們都存在。那不是我想要的。
我可以去:
(expression | expression)[last()]
事實上這確實研技總祕書處我,我需要什麼(對我來說),但似乎有點低效率的,因爲它會之前評估表達式的兩邊最後的結果被選中。 我一直希望表達能夠在左側成功後停止工作。 XML
<one>
<two>
<three>hello</three>
<four>bye</four>
</two>
<blahfive>again</blahfive>
</one>
和工作中的XPath(但效率不高)的
更具體的例子:
(/one/*[starts-with(local-name(.), 'blah')] | .)[last()]
要清楚,我想抓住的直接子節點'一'以'blah'開頭。但是,如果它不存在,我只想要當前節點。 如果'blah'節點確實存在,我不想要當前節點。
有沒有更高效的方法來實現這個目標?
1有趣的問題和IMHO爲它非常簡潔的解決方案。你能否詳細說明爲什麼你在這種情況下關心績效?從我的經驗看,XSLT表中的性能損失是由其他原因造成的。 – 2014-09-26 19:22:09
嗨。它實際上是一個Java應用程序。該應用程序使用xpath表達式(從配置文件加載)從XML文檔中提取值。應用程序會每分鐘收到很多這樣的文件,因此提高效率對於提高(或者甚至達到)可靠的吞吐量非常重要。 – svaens 2014-09-26 20:25:00
如果將它嵌入到Java中,只有當第一個XPath不會產生結果時,纔可以通過顯式執行第二個XPath來控制子表達式,是不是? – 2014-09-26 21:46:32