1

让我们考虑一个例子,

<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”。

4

2 回答 2

1

使用

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

这会产生一个字符串值的序列,其中每个span没有元素子元素,或者每个a是a 的子元素span和那个(span元素是元素的子h3元素,即顶部元素的孙子元素) XML 文档。

顺便说一句,上面恰好也是一个纯 XPath 2.0 表达式(XPath 2.0 是 XQuery 的一个子集)。

于 2012-06-12T04:02:27.837 回答
0

假设大写并不重要(在 XML 中,您有“laxman”,在您的问题“Laxman”中)并且您想要获取<li>s(否则,“and”将不合理,但如果您愿意,请移动一些轴步骤进/出谓词)。每条线都是一个替代品。

或者:

/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"]]

第一个 or-alternative 展示了XQuery 运算符的集合语义

于 2012-06-11T11:28:30.973 回答