2013-02-28 43 views
0

我不完全瞭解我在使用XPath聯合運營商時看到的行爲。TIBCO BusinessWorks XPath聯盟運營商

具有以下XML

<root> 
    <foo>hello</foo> 
    <bar>world</bar> 
</root> 

我們得到這些結果不同的XPath表達式

  • (/root/foo | /root/bar)[1] - >你好

  • (/root/foo | /root/bar)[last()] - >世界

  • (substring(/root/foo, 2, 4) | /root/bar)[1] - > ELLO

  • (substring(/root/foo, 2, 4) | /root/bar)[last()] - >世界

到目前爲止,他們是直觀的結果,但...

  • (/root/foo | substring(/root/bar, 2, 4))[1] - >年世界(預期你好)

  • (/root/foo | substring(/root/bar, 2, 4))[last()] - >你好(預計orld)

是否有提交結果的原因?這些是否符合XPath 2.0規範?

回答

3

TIBCO BusinessWorks僅與XPath 1.0兼容。一些XPath 2.0功能被支持。 (來源:FAQ1-7BXZE5上http://support.tibco.com

要回答你的兩個問題:

  • 「有提出了結果的原因是什麼?」

是的。 XPath 1.0聯合結果是不可預測的。一條很好的規則:即使對於簡單的案例,也不應該依賴於BusinessWorks中的Union順序。

  • 「這些是否符合XPath 2.0規範?」

結果不符合XPath 2.0規範,但您的查詢使用XPath 1.0引擎進行評估。

+0

如果它只是XPath 1.0兼容,那麼這個問題適用:http://stackoverflow.com/questions/8752666/xpath-1-0-order-of-returned-attributes-in-union – fglez 2013-03-07 14:10:27

1

不,最後兩個結果不符合規範。如果聯合運算符的操作數是字符串而不是節點,這是一個類型錯誤,在最後兩個例子中就是這種情況。

+0

我想你是指最後四個(他們都有一個子字符串函數)。如果我理解得好,問題是最後四個表達式不應該被允許。 – fglez 2013-02-28 16:51:13