xquery-如何在某些节点的前一个和下一个兄弟节点上放置一个“范围”条件

时间:2012-09-04 18:21:07

标签: xquery

请看下面的示例 -

<div class="patent_bibdata">
     <b> First list</b>
     <a href="1"> Name #1</a>
     <a href="2"> Name #2</a>
     <b> Second list</b>
     <a href="1"> Name #2_1</a>
     <a href="2"> Name #2_2</a>
</div>

现在,我想提取具有文本“First List”的'b'元素之后的链接 - 但是,我不希望'b'元素之后的链接有文本“Second list” - 并且我不知道“First List”之后的链接数量。

我想到的是这样的事情 -

....XQuery code defining the document as variable named "doc"
let $list:= $doc/div[ @class="patent_bibdata"]/b[. = 'First list']/following-sibling::text() -- but this should get everything after 'First list'-- including 'Second List' and 'Name #2_1' and 'Name #2_2'

现在,我只知道2'b'标签中的文字 - (即我们的例子中的'名称#1'和'名称#2') - 所以我想我必须以某种方式放置条件和检索链接(我需要的),将条件放在这些链接的直接前任兄弟和直接后继兄弟上 - 这些条件的命令是什么(如果我到目前为止)?如果我不对,那么如何获得这组链接?

1 个答案:

答案 0 :(得分:0)

这有效:

$doc/div[ @class="patent_bibdata"]/b[. = ' First list']/following-sibling::a[not(preceding-sibling::b[. = ' Second list'])]

考虑到您今天就XQuery提出的相当基本的问题,最好先了解一下XQuery的基本知识。那里有一些非常好的书,我特别喜欢Priscilla Walmsley的书。