0

嗨,我是 xquery 和 xquery 中正则表达式的新手。我有一个 xml 标签,我想找到它的某个部分..即。somethingjpg 但不让它寻找.jpg。问题是 somethingjpg 并不总是在同一个空间中。

这是一个 xml 示例:

  <book title="Harry Potter">
    <description
   xlink:type="simple"
   xlink:href="http://book.com/2012/12/28/20121228-there_is_somethingjpg_123456789a1s23e4.jpg"
  xlink:show="new">
 As his fifth year at Hogwarts School of Witchcraft and
  Wizardry approaches, 15-year-old Harry Potter is.......
    </description>
   </book>

或者 xlink:href 可以是这样的..

  <book title="Harry Potter">
    <description
   xlink:type="simple"
   xlink:href="http://book.com/2012/12/28/20121228-there_is_always_more_to_somethingelsejpg_123456789a1s23e4.jpg"
  xlink:show="new">
 As his fifth year at Hogwarts School of Witchcraft and
  Wizardry approaches, 15-year-old Harry Potter is.......
    </description>
   </book>

我想要实现的(如果可能的话)是一段 xquery 代码,它将查找 somethingjpg 或 somethingelsejpg。然后修复somethingjpg 或somethingelsejpg 只说一些东西或其他东西,再次将链接全部连接在一起,并在eXist-db中的旧链接上替换新链接

代码明智我有..

let $a := collection('/db/articles/')//book
for $b in $a//@xlink:href[contains(.,'jpg_')]
let $c := tokenize(replace($b, 'Some sort of redex I can't figure out', '$1;$2;$3'), ';')
let $d := $c[2]
let $e := replace(substring-before($d, 'jpg_'). '_')
let $f := concat ($c[1]. $e, $c[3])
return update replace $b with $f

我就是想不通剩下的……救命!!

4

1 回答 1

1

您可能希望使用eXist 的 XQuery 更新工具

特别是,update replace expr with exprSingle文档表明

如果 [expr] 是属性或文本节点,则将属性或文本节点的值设置为 exprSingle 中所有节点的串联字符串值

所以像你一样找到其值包含'jpg_'字符串的属性节点,然后用空字符串简单地替换'jpg_'(你甚至不需要正则表达式):replace($attr, 'jpg_', '')

for $attr in $a//@xlink:href[contains(.,'jpg_')]
  let $newval = replace ($attr, 'jpg_', '')
    return update replace $attr with $newval

另请参阅XQuery 更新工具文档(当然,eXist 可能会或可能不会完全实现,尽管它似乎支持得足够多)

目前尚不清楚您究竟想要替换什么以及为什么要尝试标记化 - 您需要添加更多详细信息,以防您不想简单地从属性值中删除“jpg_”。

于 2013-01-13T13:11:16.213 回答