风中的猪儿

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  11 随笔 :: 0 文章 :: 40 评论 :: 4 引用

以往我们读取Infopath表单域值的时候,都是通过一个XPath来获取相关的节点,然后再取值或者设值。大概方法如下

 

Code

我们需要知道表单中一个域的XPATH才能查到相关的值。这样比较麻烦,如果哪天表单的域要是有位置上的变化,就得改这里的代码。

其实在Infopath中,域和组的名称是不允许重复出现的,哪怕是不在同组当中,也不允许出现同样的域名称,也就是说,域和组元素名称在整个表单中是唯一的。我们使用XPathNavigator. SelectDescendants方法便可以通过域名来查找到我们需要的域节点。具体方法如下

 

Code

 

 

我们以后只需提供域名称就可以找到相应节点,而不需要通过XPATH来查询了。只要表单中存在为name的域名称,不管在哪里,我们都可以通过下面的代码找出来

 

Code

 

 

 

posted on 2008-11-26 10:27 风中的猪儿 阅读(254) 评论(2) 编辑 收藏

评论

#1楼 2008-12-01 17:28 流浪鼠      
假如是重复表或者重复项的引用不是有 重复的节点名么?

对于单个节点的是很有效。但是效率有没有直接的

XPathNavigator .SelectSingleNode("my:root/my:name",ns)
高了? 还有就是 你的iter.MoveNext(); 是不是会指向你写 空格 换行的元素呢?
 回复 引用 查看   

#2楼[楼主] 2009-08-12 17:00 风中的猪儿      
@流浪鼠
楼上的。你说的问题的确是有,对重复节点这方法不太好用
不过我就是用来处理单个节点的,呵呵

还有你说的iter.MoveNext(); 只会移动到下一个名为nodeName的节点,而不是当前节点的下一个节点,所以不存在你说的问题

效率问题,比起搞一堆的my:xxx/my:xxxxxx/my:xxxx之类的,我还是觉得这样方便一点。。。。效率。。。恩,效率就牺牲点吧。。
 回复 引用 查看