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

时间:2013-01-13 12:41:23

标签: regex xquery

您好我是xquery的新手以及在xquery中使用reguler表达式。我有一个xml标签,我想找到它的一些...就是这样。 somethingjpg但没有找到.jpg。问题是,thingjpg并不总是在同一个空间里。

这是一个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

我无法弄清楚剩下的......帮助!!

1 个答案:

答案 0 :(得分:1)

您可能想要使用XQuery Update facility of eXist

特别是,update replace expr with exprSingle文档显示

  

如果[expr]是属性或文本节点,则属性的值或   text节点设置为所有节点的连接字符串值   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 facility documentation(当然eXist可能会或可能不会完全实现,但似乎它支持的足够了)

目前还不完全清楚您要更换的内容以及您尝试进行标记的原因 - 如果您不想从属性值中删除“jpg_”,则需要添加更多详细信息。