如何在XQuery中去除节点内的回车与换行符?
如何去除XML节点内所有回车换行符?
问题场景
现有XML结构:
<test> ... <text> ABC </text> ... </test>
期望得到:
<text>ABC</text>
尝试过的代码及问题
已尝试以下XQuery代码:
let $data := <test> <text> ABC </text> </test> let $test := $data/text return replace($test,"
","")
但得到的结果是:
<text> ABC</text>
仅去掉了部分换行,节点内仍有多余的空白和换行。
解决方案
方法1:使用normalize-space()处理文本内容
normalize-space()会自动去除字符串前后的所有空白字符(包括换行、回车、空格、制表符),并将中间的多个空白替换为单个空格,适配当前场景:
let $data := <test> <text> ABC </text> </test> let $clean-text := normalize-space($data/text) return element text { $clean-text }
方法2:使用replace()匹配所有空白字符
通过正则表达式匹配所有空白字符(\s包含换行、回车、空格、制表符等)并替换为空,实现精准清理:
let $data := <test> <text> ABC </text> </test> let $clean-text := replace($data/text, '\s+', '') return element text { $clean-text }
方法3:使用translate()批量替换指定字符
针对换行(
)、回车(
)和空格,直接批量替换为空:
let $data := <test> <text> ABC </text> </test> let $clean-text := translate($data/text, concat(xs:string(xs:hexBinary("0D")), xs:string(xs:hexBinary("0A")), " "), "") return element text { $clean-text }
以上方法均可得到期望的<text>ABC</text>结果。
内容的提问来源于stack exchange,提问作者Ra1nForest
相关产品推荐
相关产品推荐

