我有以下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>
我必须删除所有不可破坏的空格,连接文本并将其正常化。
我的xpath查询(它适用于连接和规范化 - 我已将替换为'x'仅用于测试目的):
normalize-space(replace(string-join(//data/*,' '),' ','x'))
我的问题:我找不到" "
- 空格来替换它。
期待您的回答,
答案 0 :(得分:7)
元素节点的字符串值被定义为其所有后代文本节点的串联,因此在XSLT转换中
normalize-space(translate(//data, ' ', ''))
会做你需要的,假设你的文档只包含一个data
元素 - 如果有多个data
元素,那么这个表达式只会提取和规范化文档中第一个 data
元素的文本。
如果您在XSLT文件之外的某处使用XPath表达式,则需要以不同方式表示非中断空格字符。上面的示例有效,因为XML解析器在读取 
文件时将.xsl
字符引用转换为非中断空格字符,因此XPath表达式解析器会查看字符,而不是引用。例如,在Java中,我可以说
XPath.evaluate("normalize-space(translate(//data, '\u00A0', ''))", contextNode)
因为\u00A0
是表示Java字符串文字中的nbsp字符的方式。如果您使用其他语言,则需要找到以该语言表示此字符的正确方法,或者如果您使用的是XPath 2.0,则可以使用codepoints-to-string
函数:
normalize-space(translate(//data, codepoints-to-string(160), ''))