首页 > 解决方案 > 无法在 XQuery 中以正确的方式呈现 xml 文本

问题描述

我有 XML 文件,需要使用 XQuery 在 eXist-db 中以 HTML 格式呈现文本。在文本中,每个单词都应该通过悬停功能进行评论,我已经这样做了。问题是,在 XML 文件中,我有段落标签(ab 标签)、单词标签(rs 标签),但我也有标点符号字母或其他单词或 rs 标签之外的单词的某些部分。这是 XML 文件的片段:

      <ab>
           
            <rs type="pers" key="66">[7125.5]მე</rs>, 
            
            <rs type="pers" key="511">ტო[7125.1]ბი</rs>, 
            
            <rs type="pers" key="510">გზათა&lt;/rs> 
            
            <rs type="pers" key="367">ჭტ͠ბისათ&lt;/rs>
            
            <rs type="pers" key="509">ვიდ&lt;/rs> 
            <supplied reason="lost">ო&lt;/supplied>
            
            და
            
            <rs type="pers" key="513">სიმ͠რთლისათა&lt;/rs>
            
            <supplied reason="lost">
            <rs type="pers" key="523">ყოველთა&lt;/rs> 
            
            <rs type="pers" key="763">დღეთა&lt;/rs> 
            
           <rs type="pers" key="1509">ცხორებისა&lt;/rs>
                
            </supplied> 
            
            <rs type="pers" key="417">ჩ͠მისათა&lt;/rs>,
            
            და.
                
            </ab>

这是我生成文本的代码

xquery version "3.1";

module namespace letter="http://exist-db.org/db/apps/tobi-oshki/modules/letter";
import module namespace templates="http://exist-db.org/xquery/templates" ;
import module namespace config="http://exist-db.org/db/apps/tobi-oshki/config" at "config.xqm";
declare namespace tei="http://www.tei-c.org/ns/1.0";

declare function letter:text_orig($node as node(), $model as map())
{
    let $resource := collection('/db/apps/Tobi-oshki/data')
for $ab in $resource//tei:div[@type="original"]/tei:ab
for $item in tokenize($ab)

  return
<p>
{
    for $rs in $ab//tei:rs

let $note := $resource//tei:div[@type="notes"]/tei:note[@n = $rs//tei:anchor/@n]
 return
if ($item eq $rs) then
  if(data($rs/@key)) then
      if ($note) then
    <span data-toggle="tooltip" data-placement="top" 
         title="{letter:text_lem(data($rs/@key))} note: {data($note/@n)}.{$note} "> {$rs/data()} </span>
        else
             <span data-toggle="tooltip" data-placement="top" 
         title="{letter:text_lem(data($rs/@key))} "> {$rs/data()} {" "}</span>
else
   ()
else
    $item
}

};

所以在我获取文件的代码中,我循环遍历段落并返回段落

元素。在该循环中,我循环遍历单词并遍历段落中的每个项目。我想如果我比较单词($rs = rs 标签)和文本中的每个项目($item - 包含所有内容),我会打印单词和评论,如果不相等,我也会打印丢失的项目,例如"," 但循环不能正常工作,它只打印 $item 元素并多次打印。

我想渲染整个文本,但我还需要获取 rs 标签以在其上添加评论,并且不要松开其他没有评论且不在 rs 标签中的符号。我希望解释清楚。关键元素只是找到属于单词的评论。 在此处输入图像描述 这就是页面现在的样子,文本在那里,但是一些不在 rs 标签中的单词和符号丢失了。

标签: xqueryexist-dbexide

解决方案


推荐阅读