InfoPath 系列:了解INFOPATH XSN文件的格式(2)

2023-10-15 06:20

本文主要是介绍InfoPath 系列:了解INFOPATH XSN文件的格式(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇我主要为大家介绍了INFOPATH文件中manifest.xsf文件的作用,今天继续介绍剩下的几种文件类型。

myschema.xsd

      先看看这个文件的片段:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
< xsd:element name = "Form" >
    < xsd:complexType >
        < xsd:sequence >
            < xsd:element ref = "my:Department" minOccurs = "0" />
            < xsd:element ref = "my:Position" minOccurs = "0" />
            < xsd:element ref = "my:FullName" minOccurs = "0" />
            < xsd:element ref = "my:StartDate" minOccurs = "0" />
            < xsd:element ref = "my:EndDate" minOccurs = "0" />
            < xsd:element ref = "my:Reason" minOccurs = "0" />
            < xsd:element ref = "my:WhereToGo" minOccurs = "0" />
            < xsd:element ref = "my:LeaderComnts" minOccurs = "0" />
            < xsd:element ref = "my:ManagerComnts" minOccurs = "0" />
        </ xsd:sequence >
        < xsd:anyAttribute processContents = "lax" namespace = "http://www.w3.org/XML/1998/namespace" />
    </ xsd:complexType >
</ xsd:element >

?
1
< xsd:element name = "Department" type = "xsd:string" />
?
1
< xsd:element name = "Position" type = "xsd:string" />

      由于INFOPATH的数据都是通过XML文件来存储的,校验XML文件是否正确的最简单办法就是通过XSD了,所以我们在创建一个INFOPATH表单的时候同时会自动为我们创建这样一个XSD文件,这就是为我们在填写表单时的校验做准备工作。从上面的代码中可以看到每一个element的类型都为xsd:string,这是因为我们在创建表单的时候只是将控件拖进了界面,并没有对控件的最大最小值做设定,如果将设定改变后XSD文件会有什么变化呢?,现在我们就将其中的一个控件修改一下,看看效果。

      修改前Department的定义为如下:

 

?
1
< xsd:element name = "Department" type = "xsd:string" />

     

      打开之前的设计表单,在“部门”文本框上点击右键,选择“’文本框’属性”菜单。

      image

      在“数据”选项卡中为“默认值”填写一个值,将“不能为空”前的复选框选中,之后切换至“大小”选项卡,设定“文本限制为”10字符,点击确定保存设置。由于我们只是为了观察XSD文件的变化,这里我们只对这几项进行设定,更多高级选项我会在以后的文章中为大家介绍。

      image

      image

      按之前的提到的方法将表单保存、发布,并修改发布后的表单名,将其解压后打开myschema.xsd文件,并查看Department元素相关的片段。

?
1
< xsd:element name = "Department" type = "my:requiredString" />

      修改后Department的类型已经变为了my:requiredString类型,接着向下寻找my:requiredString的类型定义。

?
1
2
3
4
5
< xsd:simpleType name = "requiredString" >
    < xsd:restriction base = "xsd:string" >
        < xsd:minLength value = "1" />
    </ xsd:restriction >
</ xsd:simpleType >

      看到了吗?requiredString是一个简单类型,它的基础还是string类型,并且由于我们设定了“不能为空”的选项,所以minLength的值为是1。那我们之前设定的默认值和最大值在哪提现呢?请继续向下看。

      回到manifest.xsf文件,我们可以发现里面有些内容变化了:

?
1
2
3
    < xsf:xmlToEdit name = "Department_12" item = "/my:Form/my:Department" >
    < xsf:editWith maxLength = "10" component = "xField" ></ xsf:editWith >
</ xsf:xmlToEdit >

?
1
2
3
< xsf:documentVersionUpgrade >
    < xsf:useTransform transform = "upgrade.xsl" minVersionToUpgrade = "0.0.0.0" maxVersionToUpgrade = "1.0.0.23" ></ xsf:useTransform >
</ xsf:documentVersionUpgrade >

      可以看到这个文件中对于Department控件的最大值进行了限定。另外由于我们更新了这个表单,所以manifest.xsf文件中多了一行声明,定义了本次更新的XSL保存在“upgrade.xsl”文件中。

sampledata.xml和template.xml

      打开这两个文件发现它们的基本结构相似,这两个文件中都可以看到刚才对Department的默认值定义。

?
1
< my:Department >工程部</ my:Department >

      这两个文件从名字上都很好理解,一个是示例数据文件,一个是模板文件。

view1.xsl

      最后就是XSL文件,我想大家应该都知道这个文件的作用,就是对XML做格式转换的,还是先看看里面的代码片段吧。

     

?
1
< xsl:output method = "html" indent = "no" />

      看到这个代码了,呵呵有趣吧。

?
1
2
3
4
5
< xsl:template match = "my:Form" >
    < html >
        < head >
            < meta content = "text/html" http-equiv = "Content-Type" ></ meta >
            < style controlStyle = "controlStyle" >@media screen     

      原来template.xml文件时用在这里的,后面是标准的HTML代码,还有CSS的定义。

?
1
BODY{margin-left:21px;background-position:21px 0px;}

      原来这个XSL文件就是将我们的设计用HTML表示出来,这样就可以在INFOPATH FILLER和WEB页面上呈现出我们所设计的表单,并且将数据绑定到界面元素上。那WEB上是否直接就是用XSL中生成的HTML代码呢?是,也不是,如果想WEB容器里的INFOPATH结构,还是请大家继续关注我的博客,我之后会为大家讲解的。

      到这里INFOPATH的数据结构就全部讲完了,在我刚刚接触INFOPATH时也没想过一个XSN文件里原来是由这么多文件组成的。

      INFOPATH的基础知识到这里就基本讲完了。从下一篇开始我会为大家讲解INFOPATH表单设计器的高级功能,让我们期待如何用INFOPATH做出炫酷的表单吧。

这篇关于InfoPath 系列:了解INFOPATH XSN文件的格式(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215891

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

easyui同时验证账户格式和ajax是否存在

accountName: {validator: function (value, param) {if (!/^[a-zA-Z][a-zA-Z0-9_]{3,15}$/i.test(value)) {$.fn.validatebox.defaults.rules.accountName.message = '账户名称不合法(字母开头,允许4-16字节,允许字母数字下划线)';return fal

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma