XQuery - 计算父母之前的兄弟姐妹

时间:2016-01-14 10:57:12

标签: xquery

我希望我能够计算ePub中最高div的兄弟姐妹(脚注)。我需要在通过XSLT传递注释之前将值传递给属性。

for $note in doc('/db/custom_jh/bukwor.xml')//tei:note[@place='bottom']
let $parent := count($note[preceding-sibling::tei:div[@n='1']])
let $update := update insert attribute att2 {$parent} into $note
return $note

尝试使用$note[preceding-sibling::tei:div[@n='1']]$note[ancestor-or-self::tei:div[@n='1']]只返回0或所有div的总和。

如果可能的话,来自XSLT的<xsl:number level="any" select="tei:div[@n='1']/>"

更新 计数的最小代码(仍然不起作用,仅返回6×1,至少应该有一个2

for $note at $count in doc('/db/custom_jh/bukwor.xml')//tei:note[@place='bottom']
let $parent := count($note[ancestor-or-self::*/tei:div[@n='1']])
return $parent

2 个答案:

答案 0 :(得分:0)

我不了解XML的ePub格式,并且没有提供样本XML,所以要求不清楚,至少对我来说是这样。但根据标题,你可能想要这样的东西:

let $parent := count($note/parent::*/preceding-sibling::tei:div[@n='1'])

基本上从当前tei:div的父元素计算前一个兄弟$note,其中tei:div的{​​{1}}属性值等于n

答案 1 :(得分:0)

整个例子略显糟糕。最后,我重组了整个事情。目前,我是这样做的:

let $chaps := 
(
  let $countAll := count($doc//tei:note)
  for $chapter at $count in $doc//tei:div[@n='1']
  let $countPreceding := count($chapter/preceding::tei:div[@n='1']//tei:note[@place='bottom'])
  let $params :=
    <parameters>
        <param name="footnoteNo" value="{$countPreceding}"/>
    </parameters>
  return
    <entry name="OEBPS/chapter-{$count}.xhtml" type="xml">
      {
        transform:transform($chapter, doc("/db/custom_jh/xslt/style-web.xsl"), $params)
      }
    </entry>
)

count($chapter/preceding::tei:div[@n='1']//tei:note[@place='bottom'])对我有用。 (我需要在一个文件中收集所有脚注,并在不同文件中反向链接到索引的位置。)