在Xquery中使用“And”,“Or”运算符

时间:2012-06-11 11:12:57

标签: xquery xpath-2.0

让我们考虑一个例子,

<li>
    <div id="comments-list-245667" class="comments yui-u">
        <h3><span class="fn n">Ram</span></h3>
    </div>
    <div id="comments-list-245687" class="comments yui-u">
        <h3><span class="fn n"><a href='http://www.xyz.com' rel='external nofollow' class='url url'>laxman</a></span></h3>
    </div>
 </li>

现在如何使用“and”或“or”运算符从节点获取“Ram”和“laxman”。

2 个答案:

答案 0 :(得分:1)

使用

/*/*/h3/(span[not(*)] | span/a)/string()

这将生成每个span的字符串值的序列,其中没有元素子元素,或者每个a的字符串值都是span的子元素({{{} 1}} element是span元素的子元素,它是XML文档顶部元素的祖母。

BTW,上面也发生了纯粹的XPath 2.0表达式(XPath 2.0是XQuery的一个子集)。

答案 1 :(得分:0)

假设大写不重要(在XML中你有“laxman”,在你的问题“Laxman”中)并且你想获得<li> s(否则,“和”不合理,但是如果你愿意,可以移动一些轴进/出谓词)。每一行都是另一种选择。

或:

/li[.//h3//*[lower-case(.) = ("ram", "laxman")]]
/li[.//h3//*[lower-case(.) = "ram"] or .//h3//*[lower-case(.) = "laxman"]]

/li[.//h3//*[lower-case(.) = "ram"]][.//h3//*[lower-case(.) = "laxman"]]
/li[.//h3//*[lower-case(.) = "ram"] and .//h3//*[lower-case(.) = "laxman"]]

第一个或另一个展览XQuery operator's set semantics