XmlDocument doc = new XmlDocument();
doc.LoadXml( @"
" );
string xql = "/root/target[ contains( concat(' ',/root/child/@id,' '), concat(' ',@id,' ') ) ]";
doc.SelectNodes( xql );
结果返回了空集, 什么原因? concat函数的原型是接收可变长度的参数,把它们串连成一个返回。传递给concat中的参数之一是/root/child/@id 是一个结果集,在XML的术语中叫node-set, 这种东东送给concat它会怎么处理呢,我的想象是它把结果集中的每一个都展开来。因为是属性节点,就把属性的值都串联起来,这样内部得到的应该是
"1 2 2 3", 但实际上微软.NET 1.1中的 XPath实现是只取这个结果集中的第一个元素的值。所以上例中, 如果把第一个child元素和第二个交换, 就会返回目标节点了。在其它讲XPath的地方还没看到对这一情况的说明。此志不忘
阅读(1935) | 评论(0) | 转发(0) |