转:http://www.cnblogs.com/dujun0618/articles/750088.html

在用appendChild时注意
1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  var fatherNode = XDocument.DOM.selectSingleNode("/tr:青少年活动中心/ns1:统计报表[my:表单编号='" + tid + "']/my:记录组");
  var sonNode = XDocument.DOM.selectSingleNode("/tr:青少年活动中心/ns1:统计报表[my:表单编号='" + tid + "']/my:记录组/my:组");
  var sonNodeList = XDocument.DOM.selectNodes("/tr:青少年活动中心/ns1:统计报表[my:表单编号='" + tid + "']/my:记录组/my:组");

2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sonNodeList.removeAll();

3^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
var cloneNodeList=sonNode.cloneNode(true);
  cloneNodeList.selectSingleNode("my:日期").text=t3;
  
  //取得各种单据的申请时间信息
  cloneNodeList.selectSingleNode("my:公出申请单").text = getTimeValue("公出申请单",ygname,t3);
  cloneNodeList.selectSingleNode("my:加班审批单").text = getTimeValue("加班审批单",ygname,t3);
  cloneNodeList.selectSingleNode("my:事病假单").text = getTimeValue("事病假单",ygname,t3);
  cloneNodeList.selectSingleNode("my:调休申请单").text = getTimeValue("调休申请单",ygname,t3);
  cloneNodeList.selectSingleNode("my:年休假申请单").text = getTimeValue("年休假申请单",ygname,t3);
  
  fatherNode.appendChild(cloneNodeList);

要用这个方法,进行自动增加子结点。一定要注意,"my:记录组"的子结点里只有"my:组",不能有其它结点或组。如果一定要有,那么在appendChild时,也一定要将"my:记录组"的子结点补全才行。
my:记录组/my:组
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
var parentnode = XDocument.DOM.selectSingleNode("/my:青少年活动中心/my:老师组/my:老师/my:时间组");
var sonnode = XDocument.DOM.selectSingleNode("/my:青少年活动中心/my:老师组/my:老师/my:时间组/my:时间");
parentnode.appendChild(sonnode.cloneNode(true));//正确的
parentnode.appendChild(sonnode);//错误的,因为sonnode已经是指针指定好了,所以总是加本身。
cloneNode(true)的作用是复制sonnode结点的副本,并且子结点也复制。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
用appendChild的前提是添加结点的父结点是重复结点。

用count()函数注意
count(/my:温州圣火/my:模板结构/my:电梯类型参数[my:生产编号 = /my:温州圣火/my:生产编号用于生成序号]/my:部件组[my:部件类型 = /my:温州圣火/my:部件类型用于生成序号]/my:标准部件/my:组/my:部件信息组/my:编号)

count()函数里只能是正规的xpath语句,并且还不能饮食双引号。不能用concat()函数组合成的xpath语句。
[my:部件类型 = /my:温州圣火/my:部件类型用于生成序号]过滤里能用绝对路径就尽量用。

无法打开infopath表单的原因
XDocument.GetDOM("员工信息录入表").selectNodes(ns1:姓名);  这样会打不开表单,我当时也不相信,脚本还没引发但是运行表单时会检查的。
改成
XDocument.GetDOM("员工信息录入表").selectNodes(/dfs:myFields/dfs:dataFields/tns:GetDataResponse/tns:GetDataResult/tr:员工基本信息/ns1:姓名);就没错了。

总之表单打开时会检查脚本的语法。

有时命名空间太长,分号不能在第二行,不然也打不开。

使用View.ExecuteAction命令时重复表结构问题
my:生产表/my:生产(表内容)

一般添加重复表时默认结构是my:group1/my:group2,my:group2是重复表名可重复,而my:group1是它的父结点非重复的。

我在使用XDocument.View.ExecuteAction("xCollection::insert","生产_9"),提示错误,当时以为是XmlToEdit名称不能用中文名,然后换成字母后也出错。

原来在添加重复表时,把重复表的父结点删掉,换成重复节的结点。而重复节是可重复的。所以就出错了。

规则不能自调用
在本字段里设规则时,不能对本规则进行值的改变。这样会进入死循环的,不过系统是不会死循环的,它会在几次调用后自动跳出。

"在该表单的代码中出现错误。为单次数据更新调用 OnAfterChange 事件的次数已超过允许的最大值。"

xsl样式转换出来的字段里规则不能响应
xsl样式转换出来的字段里规则不能响应,而在重复表的新增删规则是可以用的。

XSLT中注意命名空间
//xslt样式
//---------------------------------------------------------------------------------------------
    xslContent = '<?xml version="1.0" encoding="gb2312" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28">'
    xslContent +='<xsl:template match="/"><my:工资组><xsl:for-each select="my:统计组/my:老师组/my:老师">'
    xslContent +='<my:人名组><my:教师姓名><xsl:value-of select="my:姓名"/></my:教师姓名>'
    xslContent +='<my:课时数></my:课时数>'
    xslContent +='<my:课时标准></my:课时标准>'
    xslContent +='<my:金额></my:金额>'
    xslContent +='<my:补发金额></my:补发金额>'
    xslContent +='<my:总金额></my:总金额>'
    xslContent +='<my:纳税金额></my:纳税金额>'
    xslContent +='<my:税后金额></my:税后金额>'
    xslContent +='<my:备注1></my:备注1></my:人名组></xsl:for-each>'
    xslContent +='</my:工资组></xsl:template></xsl:stylesheet>'
//-------------------------------------------------------------------------------------------------

xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28"  这个命名空间的申明不能省去,因为里面有my:前缀。不然不会成形。

var xslDom = XDocument.CreateDOM();
    xslDom.loadXML(xslContent);
    XDocument.UI.Alert(xslContent);
    XDocument.UI.Alert(xslDom.xml);

Xpath中空白字符是有效的
[my:所属部件=' 原料']
[my:所属部件='原料']
这两个是有区别的。

Xpath路径(区分大小写)
var ylid = XDocument.DOM.selectSingleNode('my:myFields/my:原材料信息/my:编号').text;

单引号和双引号都行
里面一定要区分大小写
my:myFields                 F是大写

XDocument.CreateDOM()对象命名空间的申明方法
transDOM = XDocument.CreateDOM();
       transDOM.loadXML(xmlDOM.transformNode(xslDOM));
-----------------------------------------
       transDOM.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');
-------------------------------------------
和主数据源的命名空间一样申明
XDocument.DOM.setProperty("SelectionNamespaces", 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-05-23T07:44:28" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"');

XDocument.CreateDOM()对象和结点对象
function CTRL8_5::OnClick(eventObj)
{
     var strUrl = "http://localhost/testform3.xml";

var oXmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
       
        oXmlHttp.Open("GET", strUrl, false);
        oXmlHttp.Send();
       
       
        XDocument.UI.Alert(oXmlHttp.responseXML.xml);
        XDocument.UI.Alert(oXmlHttp.responseXML.selectSingleNode("/my:myFields/my:mybooks").xml);
       
        var rexml = oXmlHttp.responseXML.selectSingleNode("/my:myFields/my:mybooks");
        var renode = XDocument.CreateDOM();
        renode.loadXML(rexml.xml);
        XDocument.UI.Alert(renode.xml);
       
        var node = XDocument.DOM.selectSingleNode("/my:myFields/my:mybooks");
        node.parentNode.appendChild(renode.documentElement);
       
        oXmlHttp.Open("PUT", strUrl, false);
        oXmlHttp.Send(XDocument.DOM.xml);
}

renode对象加载了XML后,它不selectSingleNode对象不一样,还要renode.documentElement这样得到根结点。然后才和selectSingleNode对象一样使用。

transformNode中XML被转换结点和XSL中查询路径
如果单纯是XML文件那么<>内的结点名不一定要my:等前缀,有也没事,那就全当成名字处理,这样在XSL语句中选择路径时就要结点全名了。

前缀只是在infopath中用于表示结点结构。是一种构架规则。

last()用在不同地方有区别
/my:温州圣火/my:模板结构/my:备注[last()] 
用作下拉时会取出每张表的备注的最后结,而备注只有一个结,所有相当于取出所有的备注了。

/my:温州圣火/my:模板结构[last()]/my:备注 
用作下拉时会取出最后一张表的备注。

======================================================================
concat("/my:温州圣火[my:模板结构/my:所属部件='", ., "']/my:模板结构[last()]/my:编号")
这样是先找到符合条件结点,然后取出最后一个。

concat("/my:温州圣火/my:模板结构[my:所属部件='", ., "' and last()]/my:编号")
这个并不能实现取出符合条件的最后一个。

使用Infopath时要注意的有哪些相关推荐

  1. 一步一步搞定InfoPath(02)--配置VSTA

    一步一步InfoPath(02)--安装VSTA环境 VSTA(Visual Studio Tools for Applications)安装 计算机需要安装了 Microsoft .NET Fram ...

  2. SharePoint 2013 InfoPath 无法保存下列表单

    在使用InfoPath发布表单,发布到SharePoint服务器报错,如下介绍: 环境:Windows 2012 DateCenter + Sql 2012 + SharePoint 2013 + O ...

  3. 一步步学习微软InfoPath2010和SP2010--第四章节--处理SP列表表单(6)--列表表单的局限...

    当SharePoint列表作为InfoPath表单被自定义时,当涉及到SharePoint ASP.NET页.作为InfoPath表单的SharePoint列表和表单库表单之间的表单行为时,有一些细微 ...

  4. 一步步学习微软InfoPath2010和SP2010--第一章节--介绍InfoPath2010

    本章你将学到: 1. 历数使用SP2010的同时,使用InfoPath2010表单的好处. 2. 使用MS Office后台功能创建新的InfoPath表单 3. 导航InfoPath界面 4. 创建 ...

  5. 在程序中设置infopath中的整型等域值时出错解决方法

    最近一直和infopath表单打交道,碰到的问题也比较多,刚刚就碰到一个在程序中修改infopath表单中域的内容时出错的问题,写出来与大家共享一下,我想这个问题,可能玩infopath的话,迟早会碰 ...

  6. infopath创建时添加重复节

    添加重复节,可以在填写表格的时候重复的添加相同的格式项 点击开始-控件,选择重复节 2.在已插入重复节的区域中添加所需的域即可

  7. infopath java包_InfoPath 2013 修补程序包 (Ipeditor x none.msp) 的描述︰ 2014 年 4 月 8,...

    修补程序信息 可以从 Microsoft 获得受支持的修复程序.然而,此修补程序仅用于解决本文中描述的问题.此修复程序仅适用于遇到本文中描述的问题的系统.此修补程序可能会接受进一步的测试.因此,如果这 ...

  8. SharePoint2013 Online中InfoPath 无法调用WebService

    传说微软office365中国区服务器已经迁移到国内,试了下速度果然比之前快了很多,不过随后测试了个简单的功能,还是直接被打击了. 准备在online版本中做一个简单的报销流程测试测试,于是先用Inf ...

  9. [译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表...

    翻译:实现多级联动的下拉式列表 原文:http://blogs.msdn.com/infopath/archive/2006/10/12/cascading-dropdowns-in-browser- ...

  10. 使用脚本将数据从辅助数据源传送到 InfoPath 域

    概要 在 Microsoft Office InfoPath 2003中,不能直接将表单中的域绑定到辅助数据源中的数据.但是,本文介绍如何以编程方式转换辅助数据源中的数据,然后在运行时将转换后的数据传 ...

最新文章

  1. 安装VMWare tools,以及解决安装后/mnt中有hgfs但没共享文件的方法
  2. oracle配置oracle Database Configuration Assistant失败是什么原因?
  3. CentOS 6.0安装RPMforge源
  4. python交作业的格式_python作业4
  5. python条件查询 或 in_64.Python中ORM查询条件:in和关联模型
  6. 查询blob字段_一次注解开发实战-我使用注解对微服务的跨库查询做了封装
  7. dos进入mysql不记得密码_windos mysql 忘记密码,无密码登录,重新登录
  8. linux查询机器信息,linux_机器信息查询
  9. tbb::atomic和std::atomic的区别 废弃
  10. 单机安装DynamicsAX2012R3VM
  11. 收件服务器位置,如何查看邮箱的收件服务器地址
  12. 2020中科院信工所夏令营面试
  13. Android实现截屏功能(已适配Android11)
  14. K Simple question (第十届山东理工大学ACM网络编程擂台赛 正式赛)
  15. 疫情之下,征信有逾期如何处理?
  16. 2021-05-12 MongoDB面试题 MongoDB副本集选举条件有那些
  17. GTK 框架(Frames)
  18. BUUCTF——rsa系列(4)
  19. 窗口全屏化得方法大全(5种方法,你都知道吗?)
  20. OpenCV实战——文本检测

热门文章

  1. JDK Frame内容区绘制边框
  2. 编译修改OpenCV的rpath
  3. git太慢时的加速办法,测试有效
  4. 泰山游记:为何爬山后大腿前部很酸?
  5. 汝把公司搞死了,不批汝批谁?
  6. 迅雷极速与旋风的对比
  7. 公里与英里的换算c语言函数_这些天然气单位换算你知道吗?
  8. 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
  9. 始于CSDN,归于CSDN【一个七年老码农的心声】
  10. windows 核心编程下的内存映射文件