我有一个带有节点集合的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
吗?
答案 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)
就是这样。表达式很好。