根据您的具体情况,有不同的 XPath 表达式将选择 node,其值包含一些空格。
首先,让我们回想一下,这些字符中的任何一个都是“空白”:
	
-- 标签


- 新队

-- 回车
' '
或者 
——空间
如果您知道节点的确切值,说它是Hello World
带有空格的“”,那么最直接的 XPath 表达式:
/top/aChild[. = 'Hello World']
将选择此节点。
然而,指定一个包含空格的值的困难在于,我们看到所有的空格字符就像......好吧,空格并且不知道它是一组空格还是单个制表符。
在XPath 2.0中可以使用正则表达式,它们提供了一种简单方便的解决方案。因此,我们可以使用 XPath 2.0 表达式,如下所示:
/*/aChild[matches(., "Hello\sWorld")]
选择顶部节点的任何子节点,其值为字符串“Hello”,后跟空格,后跟字符串“World”。注意matches()
函数和\s
匹配空格的“”模式的使用。
在XPath 1.0中,一个给定字符串是否包含任何空白字符的方便测试是:
not(string-length(.)= stringlength(translate(., ' 	

','')))
在这里,我们使用该translate()
函数消除四个空白字符中的任何一个,并将结果字符串的长度与原始字符串的长度进行比较。
因此,如果在文本编辑器中,节点的值显示为
“你好世界”,
我们可以使用 XPath 表达式安全地选择此节点:
/*/aChild[translate(., ' 	

','') = 'HelloWorld']
在许多情况下,我们还可以使用 XPath 函数normalize-space()
,它从它的字符串参数生成另一个字符串,其中前导和尾随空格组被剪切,并且字符串中的每个空格都被单个空格替换。
在上述情况下,我们将简单地使用以下 XPath 表达式:
/*/aChild[normalize-space() = 'Hello World']