您使用的.NET代碼,從而得出我你堅持使用XPath 1.0。
級聯固定數目的原子的字符串的是容易在的XPath 1.0通過使用concat($string1, $string2, ..., $stringN)
,例如
concat('/Customer/Order', '/', 'LineItem/Description/text()')
然而,這需要知識拖尾斜線是否存在或不存在。 XPath 1.0並不真正瞭解大小寫區別,並且字符串處理能力非常有限,但您仍然陷入了相當難看的謂詞攻擊和重複字符串。
concat('/Customer/Order',
'/'['/' != substring('/Customer/Order', string-length('/Customer/Order'))],
'LineItem/Description/text()'
)
使用新引進的ends-with(...)
功能的if-then-else子句使用的XPath 2.0,你可以不喜歡
concat('/Customer/Order',
if (ends-with('/Customer/Order', '/'))
then ''
else '/',
'LineItem/Description/text()'
)
還是有點短
concat('/Customer/Order',
'/'[not(ends-with('/Customer/Order', '/'))],
'LineItem/Description/text()'
)
最後使用帶有單個項目循環的hack刪除重複變量的要求:
for $string in '/Customer/Order'
return
concat($string,
'/'[not(ends-with($string, '/'))],
'LineItem/Description/text()'
)
結論:不考慮 「複雜」 的字符串操作中的XPath,特別是沒有的XPath 1.0。 XPath 2.0看起來更好,使用XQuery也很有趣。
如果XPath沒有動態評估,串聯兩個路徑表達式有什麼意義? – 2014-10-07 22:51:07
我希望我可以upvote @基里爾的答案,這是自動和錯誤地標記爲不提供答案。邁克麥考恩,讓票決定。質量低下,或「使用量低於預期」,與「不是答案」不一樣。 – LarsH 2014-10-08 03:00:53
@LarsH即使技術上是正確的,「這是不可能」的答案應該至少提供一些關於_why_這是不可能的證據。否則,它不符合答案的標準,並且屬於評論部分。邁克·麥考恩在9個小時前說了基本上相同的事情。 – JLRishe 2014-10-08 07:55:11