博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Infopath 2010 设置具有 xsi:nil 属性的节点的值
阅读量:5107 次
发布时间:2019-06-13

本文共 2125 字,大约阅读时间需要 7 分钟。

对于某些数据类型,尝试以编程方式设置空白域的值时将引发"架构验证过程发现非数据类型错误"错误。导致出现此错误的原因通常是,元素的 属性设置为 true。如果您检查表单中空白域的基础 XML 元素,您会看到此设置。例如,以下空白日期域的 XML 段的 xsi:nil 属性设置为 true

XML  复制代码

如果 xsi:nil 属性设置为 true,则表示相应元素存在但没有值,或者换句话说就是元素为 空。如果您尝试以编程方式设置这样一个节点的值,InfoPath 将显示"架构验证过程发现非数据类型错误"消息,原因是元素当前标记为 空。InfoPath 将以下数据类型的 空 域的 xsi:nil 属性设置为 true

  • Whole Number (integer)

  • Decimal (double)

  • Date (date)

  • Time (time)

  • Date and Time (dateTime)

为了防止发生此错误,您的代码必须测试 xsi:nil 属性。如果该属性存在,则在设置节点值前删除该属性。下面的子例程采用一个位于您要设置的节点上的 XpathNavigator 对象,检查 nil 属性,然后将其删除(如果它存在)。

C#  复制代码
public void DeleteNil(XPathNavigator node){   if (node.MoveToAttribute(      "nil", "http://www.w3.org/2001/XMLSchema-instance"))      node.DeleteSelf();}
Visual Basic  复制代码
Public Sub DeleteNil(ByVal node As XPathNavigator)   If (node.MoveToAttribute( _      "nil", "http://www.w3.org/2001/XMLSchema-instance")) Then      node.DeleteSelf()   End IfEnd Sub

在尝试设置可能具有 xsi:nil 属性的某数据类型的域之前,您可以调用此子例程,如以下设置日期域的示例所示。

C#  复制代码
// Access the main data source.XPathNavigator myForm = this.CreateNavigator();// Select the field.XPathNavigator myDate = myForm.SelectSingleNode("/my:myFields/my:myDate", NamespaceManager);// Check for and remove the "nil" attribute.DeleteNil(myDate);// Build the current date in the proper format. (yyyy-mm-dd)string curDate = DateTime.Today.Year + "-" + DateTime.Today.Month +    "-" + DateTime.Today.Day;// Set the value of the myDate field.myDate.SetValue(strCurDate);
Visual Basic  复制代码
' Access the main data source.Dim myForm As XPathNavigator = Me.CreateNavigator()' Select the field.Dim myDate As XPathNavigator = _   myForm.SelectSingleNode("/my:myFields/my:myDate", NamespaceManager)' Check for and remove the "nil" attribute.DeleteNil(myDate)' Build the current date in the proper format. (yyyy-mm-dd)Dim curDate As String = DateTime.Today.Year + "-" + _   DateTime.Today.Month + "-" + DateTime.Today.Day' Set the value of the myDate field.myDate.SetValue(strCurDate)
注释

尽管 InfoPath 中的 XPathNavigator 对象实现可公开 方法(用于设置使用特定类型值的节点),但是 InfoPath 不会实现该方法。您必须改用 SetValue 方法,并为节点的数据类型传递一个正确格式的字符串值。

转载于:https://www.cnblogs.com/annpaul/archive/2010/12/21/1912747.html

你可能感兴趣的文章
beyond compare 4.2.9桌面右键集成的问题修复
查看>>
冒泡排序
查看>>
jdk8_默认方法
查看>>
PS 2018安装教程
查看>>
transition 用法
查看>>
淘宝镜像cnpm提示“不是内部命令”解决方法
查看>>
Host '****' is not allowed to connect to this MySQL server(数据库不能远程连接)
查看>>
java发送POST请求,参数用&分隔
查看>>
java发送POST/GET/PUT/DELETE请求,header传参,body参数为json格式
查看>>
io.dubbo.springboot版本不兼容dubbo-2.5.3
查看>>
redis入门初学知识
查看>>
linux安装redis
查看>>
CDH6.1.1阿里云安装实践
查看>>
假期周进度报告4
查看>>
假期周进度报告5
查看>>
假期周进度报告7
查看>>
《大道至简》读后感
查看>>
假期周进度报告6
查看>>
JAVA开学测试
查看>>
假期周进度报告8
查看>>