繁体   English   中英

xquery正则表达式...有没有更简单的方法

[英]xquery regular expression…is there an easier way

嗨,我是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>

我试图实现的目标(如果可能的话)是一段x​​query代码,该代码将查找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

我只是想不通其余的...帮助!

您可能要使用eXistXQuery Update工具

特别是, update replace expr with exprSingle文档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 Update工具文档 (当然,eXist可能会或可能不会完全实现,尽管它似乎足够支持)

目前尚不清楚您确切要替换的内容以及为何要标记化的原因-您需要添加更多详细信息,以防您不想简单地从属性值中删除“ jpg_”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM