XPath:我可以使用if-then-else返回for-return吗?

时间:2014-10-14 09:51:52

标签: xml xpath xpath-2.0

我有一个带有节点集合的XML文档:

<doc>
    <product>
        <name>one
        </name>
        <price>21
        </price>
        <category>cat1
        </category>
        <id>1
        </id>
    </product>
    <product>
        <name>two
        </name>
        <category>cat2
        </category>
        <price>19
        </price>
        <id>2
        </id>
    </product>
</doc>

如果价格是&gt;我需要选择产品的名称。 20和category是cat1,否则产品的 id

我尝试做的是迭代节点并根据上述标准返回名称或ID:

for $product in /doc return if (price > 20 and cat = 'cat1') then name else id

但我收到错误“期待回归,但发现是否(”。

我可以不在if的回复条款中使用for吗?

2 个答案:

答案 0 :(得分:1)

您的表达式对我来说看起来是正确的XPath 2.0语法,因此我不理解错误消息。 (你使用什么XPath处理器?)

然而,语义都是错误的。您正在绑定您未使用的变量$ product。什么是当时的上下文节点?如果它是根元素,则表达式price,cat,name和id不会返回任何内容,因为它们需要product元素作为上下文节点。尝试:

/doc/product/(if (price > 20 and cat = 'cat1') then name else id)

答案 1 :(得分:0)

xpath表达式上有一个简单错误,代替cat,必须是类别:

/doc/product/(if (price > 20 and category='cat1') then name else id)

就是这样。表达式很好。