我有以下xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>
<child1> Well, some spaces and nbsps  </child1>
<child2>  some more   or whatever </child2>
<child3> a nice text</child3>
<child4>how to get rid of all the nasty spaces  ? </child4>
</data>
</root>
Run Code Online (Sandbox Code Playgroud)
我必须删除所有不可破坏的空格,连接文本并将其正常化.
我的xpath查询(它适用于连接和规范化 - 我已将替换为'x'仅用于测试目的):
normalize-space(replace(string-join(//data/*,' '),' ','x'))
Run Code Online (Sandbox Code Playgroud)
我的问题:我找不到" "-whitespace来替换它.
期待您的回答,
元素节点的字符串值被定义为其所有后代文本节点的串联,因此在XSLT转换中
normalize-space(translate(//data, ' ', ''))
Run Code Online (Sandbox Code Playgroud)
会做你需要什么,假设你的文件只包含一个data元素-如果有一个以上的data元素,则该表达式将只提取和标准化的文本第一个 data文档中的元素.
如果您在XSLT文件之外的某处使用XPath表达式,则需要以不同方式表示非中断空格字符.上面的示例有效,因为XML解析器 在读取.xsl文件时将字符引用转换为非中断空格字符,因此XPath表达式解析器会查看字符,而不是引用.例如,在Java中,我可以说
XPath.evaluate("normalize-space(translate(//data, '\u00A0', ''))", contextNode)
Run Code Online (Sandbox Code Playgroud)
因为\u00A0是在Java字符串文字中表示nbsp字符的方式.如果您使用的是其他语言,则需要找到以该语言表示此字符的正确方法,或者如果您使用的是XPath 2.0,则可以使用以下codepoints-to-string函数:
normalize-space(translate(//data, codepoints-to-string(160), ''))
Run Code Online (Sandbox Code Playgroud)