使用xpath删除不可破坏的空格

时间:2012-11-05 17:19:01

标签: xml xpath

我有以下xml文档:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>
<child1>&#160;Well, some  spaces and nbsps  &#160;</child1>
<child2>&#160; some more                  &#160;  or whatever          </child2>
<child3>         a nice text</child3>
<child4>how                              to get rid of all the nasty spaces&#160;          ?                                  </child4>
</data>
</root>

我必须删除所有不可破坏的空格,连接文本并将其正常化。

我的xpath查询(它适用于连接和规范化 - 我已将替换为'x'仅用于测试目的):

normalize-space(replace(string-join(//data/*,' '),'&#160;','x'))

我的问题:我找不到"&#160;" - 空格来替换它。

期待您的回答,

1 个答案:

答案 0 :(得分:7)

元素节点的字符串值被定义为其所有后代文本节点的串联,因此在XSLT转换中

normalize-space(translate(//data, '&#160;', ''))

会做你需要的,假设你的文档只包含一个data元素 - 如果有多个data元素,那么这个表达式只会提取和规范化文档中第一个 data元素的文本。

如果您在XSLT文件之外的某处使用XPath表达式,则需要以不同方式表示非中断空格字符。上面的示例有效,因为XML解析器在读取&#160;文件时将.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), ''))
相关问题