Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2314825
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2006-07-20 19:12:50

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的地方还没看到对这一情况的说明。此志不忘
阅读(1899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~