我是XQuery的新手。有没有办法使用XQuery来转换此输入
<mods>
<subject>
<topic> bird ; cat ; dog ; lion </topic>
</subject>
</mods>
进入以下XML?
<mods>
<subject>
<topic> bird </topic><topic> cat </topic><topic> dog </topic><topic> lion </topic>
</subject>
</mods>
我尝试使用该功能
replace(node,';','</topic><topic>' )
但它将角度<
>
括号转换为实体引用<
或>
。
答案 0 :(得分:2)
replace(...)
仅适用于字符串,不适用于元素。 '</topic><topic>'
(字符串)和</topic><topic>
(无效的XML)不一样!
重建结果(您可能也可以使用XQuery Update),并对每个<topic/>
元素进行标记,为每个元素创建新的主题项:
element mods {
element subject {
for $topics in /mods/subject/topic
for $topic in tokenize($topics, ';')
return element topic { $topic }
}
}
为了构造新元素,我更喜欢上面使用的计算元素构造函数。 element nodeName { $content }
相当于使用<nodeName>{ $content }</nodeName>
。
答案 1 :(得分:2)
如果您的XQuery Processor支持XQuery Update,您可以尝试以下查询:
copy $xml := document {
<mods>
<subject>
<topic> bird ; cat ; dog ; lion </topic>
</subject>
</mods>
}
modify (
let $topic := $xml/mods/subject/topic
return replace node $topic with
for $token in tokenize($topic, ';')
return <topic>{ $token }</topic>
)
return $xml