2013-02-28 44 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