您好我是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>
我想要实现的(如果它甚至可能)是一段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
我无法弄清楚剩下的......帮助!!
答案 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_”,则需要添加更多详细信息。