XQuery和XPath-根据当前属性测试子级/属性

时间:2018-10-31 22:23:47

标签: xpath xquery xquery-3.0

我有许多结构化的xml文件

<seg type="dep_event" xml:id="MS609-0000-01">
  <date type="event_date" when="1245"/>
</seg>

<date type="event_date" when="1245">是可选的。

现在在Xpath / Xquery 3.1中,我需要根据当前上下文节点 date@when来测试seg/@xml:id是否存在。

想象一下Xquery 3.1中的这种情况:

let $doc := doc(somedocument.xml)

for $xmlidattr in $doc//tei:seg[@type="dep_event"]/@xml:id

现在,我需要使用date/@when来测试$xmlidattr

非常感谢。

编辑:重组后的问题可以更清楚地了解XQuery中的context node的概念

1 个答案:

答案 0 :(得分:2)

id的父级是seg,其子级是date

../date[@type="event_date"][@when="1245"]

这是原始问题的答案。问题已经改变,新的答案是

$xmlidattr/../date[@type="event_date"][@when="1245"]

但是,我通常会从包含元素而不是从属性开始:

for $seg in $doc//tei:seg[@type="dep_event"],
    $xmlidattr in $seg/@xml:id
return f($seg/date[@type="event_date"][@when="1245"])