此为末学在开发OA系统中针对电子表单功能块所进行的实验性方案,因此前对XML虽有所了解,但运用并不熟练,幸于W3chool
等网站受益颇多,耗费一周始才完成,古人有云“滴水之恩,当以涌泉相报”,故将此拙作奉献于广大软件技术爱好者,虽不敢以涌泉而自诩,但于初学或有所益也。
以下张贴内容版权开放,转载请注明出处。
电子表单内容由XML文件来承载,在具体创建表单时,因怕对格式书写有误,故用XML Schema以约束之,而用户在系统中填报表单所面对的应是Web页面,故又以XSLT加以转换,所有关联文件分贴如下:
XML模板文件: form.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3school.com.cn/eForm"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ef="http://www.w3school.com.cn/eForm">
<xs:attributeGroup name="fieldAttributeGroup">
<xs:attribute name="id" type="xs:Name" use="required" />
<xs:attribute name="label" type="xs:token" use="required" />
<xs:attribute name="require" type="xs:boolean" use="optional" />
<xs:attribute name="description" type="xs:token" use="optional" />
</xs:attributeGroup>
<xs:complexType name="stringField">
<xs:attributeGroup ref="ef:fieldAttributeGroup" />
<xs:attribute name="value" type="xs:token" />
</xs:complexType>
<xs:complexType name="textField">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attributeGroup ref="ef:fieldAttributeGroup" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="numbleField">
<xs:attributeGroup ref="ef:fieldAttributeGroup" />
<xs:attribute name="value" type="xs:decimal" />
</xs:complexType>
<xs:complexType name="dateField">
<xs:attributeGroup ref="ef:fieldAttributeGroup" />
<xs:attribute name="value" type="xs:date" />
</xs:complexType>
<xs:complexType name="singleChoiceField">
<xs:all>
<xs:element name="options" type="ef:options" />
</xs:all>
<xs:attributeGroup ref="ef:fieldAttributeGroup" />
</xs:complexType>
<xs:complexType name="multipleChoiceField">
<xs:all>
<xs:element name="options" type="ef:options" />
</xs:all>
<xs:attributeGroup ref="ef:fieldAttributeGroup" />
</xs:complexType>
<xs:complexType name="options">
<xs:choice minOccurs="2" maxOccurs="unbounded">
<xs:element name="option" type="ef:option" />
</xs:choice>
</xs:complexType>
<xs:complexType name="option">
<xs:simpleContent>
<xs:extension base="xs:normalizedString">
<xs:attribute name="checked" type="xs:boolean" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="group">
<xs:group ref="ef:field" minOccurs="1" maxOccurs="unbounded" />
<xs:attribute name="label" type="xs:token" use="required" />
</xs:complexType>
<xs:group name="field">
<xs:choice>
<xs:element name="dateField" type="ef:dateField" nillable="true" />
<xs:element name="multipleChoiceField" type="ef:multipleChoiceField" />
<xs:element name="numbleField" type="ef:numbleField"
nillable="true" />
<xs:element name="singleChoiceField" type="ef:singleChoiceField" />
<xs:element name="stringField" type="ef:stringField"
nillable="true" />
<xs:element name="textField" type="ef:textField" nillable="true" />
<xs:element name="group" type="ef:group" />
</xs:choice>
</xs:group>
<xs:element name="form">
<xs:complexType>
<xs:group ref="ef:field" minOccurs="1" maxOccurs="unbounded" />
</xs:complexType>
<xs:key name="ID">
<xs:selector
xpath=".//ef:dateField | .//ef:multipleChoiceField | .//ef:numbleField | .//ef:singleChoiceField | .//ef:stringField | .//ef:textField" />
<xs:field xpath="@id" />
</xs:key>
</xs:element>
</xs:schema>
xml示例文件:sample.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="formEdit.xsl"?>
<ef:form xmlns:ef="http://www.w3school.com.cn/eForm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn/eForm form.xsd ">
<ef:multipleChoiceField label="多选1" id="duoxuan1" description="描述多选字段">
<ef:options>
<ef:option>选项1</ef:option>
<ef:option checked="true">选项2</ef:option>
<ef:option>选项3</ef:option>
</ef:options>
</ef:multipleChoiceField>
<ef:group label="组1">
<ef:dateField label="时间" id="shijian" description="描述时间字段"/>
<ef:numbleField label="数字" id="shuzi" value="2"/>
</ef:group>
<ef:dateField label="时间1" id="shijian1" value="2009-01-01" />
<ef:dateField label="时间2" id="shijian2" />
<ef:stringField label="字符串1" id="zifuchuan" value="默认字符串"/>
<ef:textField label="常字符串" id="DD">
你好
我很好
</ef:textField>
<ef:group label="组2">
<ef:singleChoiceField label="单选" id="danxuan">
<ef:options>
<ef:option>选项1</ef:option>
<ef:option>选项2</ef:option>
<ef:option>选项3</ef:option>
</ef:options>
</ef:singleChoiceField>
</ef:group>
</ef:form>
xslt转换文件:formEdit.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ef="http://www.w3school.com.cn/eForm">
<xsl:template match="/">
<html>
<head>
<title>显示表单</title>
<link type="text/css" rel="stylesheet" href="ef.css" />
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<!-- 组模板 -->
<xsl:template match="ef:group">
<fieldSet class="ef-group">
<legend>
<xsl:value-of select="@label"></xsl:value-of>
</legend>
<xsl:apply-templates />
</fieldSet>
</xsl:template>
<!-- 日期字段模板 -->
<xsl:template match="ef:dateField">
<div class="ef-date-field">
<xsl:call-template name="fieldLabel" />
<div class="ef-input-control">
<input type="text">
<xsl:call-template name="inputControlAttribute" />
</input>
</div>
</div>
</xsl:template>
<!-- input输入控件属性模板 -->
<xsl:template name="inputControlAttribute">
<xsl:attribute name="id">
<xsl:value-of select="@id" />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@id" />
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="@value" />
</xsl:attribute>
</xsl:template>
<!-- 字段标签模板 -->
<xsl:template name="fieldLabel">
<label class="ef-field-label">
<xsl:attribute name="for">
<xsl:value-of select="@id" />
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="@description" />
</xsl:attribute>
<xsl:value-of select="@label" />
</label>
</xsl:template>
<!-- 选项属性模板 -->
<xsl:template name="choiceOptionAttribute">
<xsl:param name="choiceFieldId" />
<xsl:attribute name="id">
<xsl:value-of select="$choiceFieldId" />
<xsl:number />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="$choiceFieldId" />
</xsl:attribute>
<xsl:attribute name="value">
<xsl:choose>
<xsl:when test="@value">
<xsl:value-of select="@value" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="text()" />
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:if test="@checked = 'true'">
<xsl:attribute name="checked">
<xsl:value-of select="'checked'" />
</xsl:attribute>
</xsl:if>
</xsl:template>
<!-- 选项标签模板 -->
<xsl:template name="optionLabel">
<xsl:param name="choiceFieldId" />
<label>
<xsl:attribute name="for">
<xsl:value-of select="$choiceFieldId" />
<xsl:number />
</xsl:attribute>
<xsl:value-of select="text()" />
</label>
</xsl:template>
<!-- 多选字段模板 -->
<xsl:template match="ef:multipleChoiceField">
<xsl:variable name="choiceFieldId" select="@id" />
<div class="ef-multiple-choice-field">
<xsl:call-template name="fieldLabel" />
<div class="ef-checkbox-group">
<xsl:for-each select="ef:options/ef:option">
<div class="ef-checkbox">
<input type="checkbox">
<xsl:call-template name="choiceOptionAttribute">
<xsl:with-param name="choiceFieldId" select="$choiceFieldId" />
</xsl:call-template>
</input>
<xsl:call-template name="optionLabel">
<xsl:with-param name="choiceFieldId" select="$choiceFieldId" />
</xsl:call-template>
</div>
</xsl:for-each>
</div>
</div>
</xsl:template>
<!-- 数字字段模板 -->
<xsl:template match="ef:numbleField">
<div class="ef-numble-field">
<xsl:call-template name="fieldLabel" />
<div class="ef-input-control">
<input type="text">
<xsl:call-template name="inputControlAttribute" />
</input>
</div>
</div>
</xsl:template>
<!-- 单选字段模板 -->
<xsl:template match="ef:singleChoiceField">
<xsl:variable name="choiceFieldId" select="@id" />
<div class="ef-single-choice-field">
<xsl:call-template name="fieldLabel" />
<div class="ef-radio-group">
<xsl:for-each select="ef:options/ef:option">
<div class="ef-radio">
<input type="radio">
<xsl:call-template name="choiceOptionAttribute">
<xsl:with-param name="choiceFieldId" select="$choiceFieldId" />
</xsl:call-template>
</input>
<xsl:call-template name="optionLabel">
<xsl:with-param name="choiceFieldId" select="$choiceFieldId" />
</xsl:call-template>
</div>
</xsl:for-each>
</div>
</div>
</xsl:template>
<!-- 字符串字段模板 -->
<xsl:template match="ef:stringField">
<div class="ef-string-field">
<xsl:call-template name="fieldLabel" />
<div class="ef-input-control">
<input type="text">
<xsl:call-template name="inputControlAttribute" />
</input>
</div>
</div>
</xsl:template>
<!-- 长文本字段模板 -->
<xsl:template match="ef:textField">
<div class="ef-text-field">
<xsl:call-template name="fieldLabel" />
<div class="ef-textarea-control">
<textarea>
<xsl:attribute name="id">
<xsl:value-of select="@id" />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@id" />
</xsl:attribute>
<xsl:value-of select="text()" />
</textarea>
</div>
</div>
</xsl:template>
</xsl:stylesheet>
最后与页面显示有关的css样式表文件:ef.css
@CHARSET "UTF-8";
.ef-group,.ef-date-field,.ef-multiple-choice-field,.ef-numble-field,.ef-single-choice-field,.ef-string-field,.ef-text-field
{
margin: 5px;
width: 100%;
}
.ef-field-label {
float: left;
width: 100px;
font-weight: bold;
}
.ef-checkbox,.ef-radio {
float: left;
margin-right: 10px;
}
最终效果如下图所示:
分享到:
相关推荐
xmlspy是符合行业标准的XML开发环境,专门用于设计,编辑和调试企业级的应用程序,包括XML, XML Schema, XSL/XSLT, SOAP, WSDL和互联网服务技术。这是J2EE,.NET和数据库开发人员不可缺少的高性能的开发工具。 最新...
确保XML文档遵循一定的架构,这可以通过创建XML Schema Definition (XSD)文件来实现。XSD文件定义了XML元素的结构和类型,有助于验证XML文档是否有效。 创建XSD文件的过程相对简单,只需在XML编辑器(如Visual ...
3. DTD(Document Type Definition)或XSD(XML Schema Definition):用于定义XML文档的结构和数据类型,确保数据的准确性和一致性。 二、XML与数据库的交互 1. 数据获取:通过XPath或XQuery查询语言,可以从XML...
xmlspy是符合行业标准的XML开发环境,专门用于设计,编辑和调试企业级的应用程序,包括XML, XML Schema, XSL/XSLT, SOAP, WSDL 和互联网服务技术。这是J2EE,.NET和数据库开发人员不可缺少的高性能的开发工具。 ...
Oracle XML技术集成了多种标准和技术,包括XML Schema、XPath、XQuery、XSLT等,旨在提供一个全面的XML解决方案。 #### 二、Oracle XML核心技术解析 ##### 1. XML Schema XML Schema是一种用于描述XML文档结构的...
《Dreamweaver与XML综合应用》 XML(Extensible Markup Language)是一种用于标记数据的语言,它的设计目的是传输和存储数据,而不是显示数据。在IT领域,XML被广泛应用于数据交换、文档存储和Web应用程序中。而...
xmlspy是符合行业标准的XML开发环境,专门用于设计,编辑和调试企业级的应用程序,包括XML, XML Schema, XSL/XSLT, SOAP, WSDL 和互联网服务技术。这是J2EE,.NET和数据库开发人员不可缺少的高性能的开发工具。 最新...
- **XML文档类型定义(DTD)或XML Schema(XSD)**:这些工具可以用来定义XML文档的结构和数据类型,确保文档的合规性。 2. **ASP.NET环境** - **ASP.NET Web Forms**:一种常用的开发模型,允许开发者通过控件和事件...
特别是在那些需要频繁更新或调整用户界面的场景下(例如,基于不同Schema版本的表单),手动开发的方式显得尤为低效。因此,寻找一种能够自动根据Schema生成用户界面的方法显得尤为重要。 #### 技术实现 ##### ...
主要内容有XML基本语法、DTD、XML Schema、RELAX NG、XPath、XSLT、XQuery、DOM、SAX、RSS、Web服务、Ajax、SOAP、CSS、XHTML、SVG和XForms等,每章都有习题,书后附有参考答案,可帮助你全面掌握XML及其应用方法。
7.1.1 XSLT样式表单定义了转换过程,输入是XML文档,输出可以是多种格式。样式模板通过匹配XML元素来定义转换逻辑。 7.1.2 XSLT样式表单由模板组成,每个模板定义了一个匹配模式,和等指令用于处理和输出数据。此外...
XML文档还包含DTD(Document Type Definition)或XSD(XML Schema Definition)来定义文档结构和数据类型。DTD是一种早期的验证机制,而XSD则提供了更复杂的数据类型和结构约束。 XML在IT行业中的应用广泛,包括但...
2. **DTD(Document Type Definition)或XSD(XML Schema Definition)**:为了验证XML文档的结构和内容是否符合预设规范,可以使用DTD或XSD定义文档结构和数据类型。这有助于确保所有提交的留言都符合预定格式。 3...
"XML简述"和"XML教程"会引导你理解XML的基本结构、命名规则、文档类型定义(DTD)或XML Schema用于验证数据的正确性,以及XPath、XSLT等工具来查询和转换XML数据。 XML文档通常包含元素、属性、注释、处理指令等...
《HTML与XML编程宝典》是一本深入探讨这两门核心技术的综合指南,旨在帮助读者全面理解和掌握HTML(超文本标记语言)与XML(可扩展标记语言)的编程知识。XML作为数据交换和存储的重要标准,与HTML在互联网应用中...
3. **XML Schema (XSD)**:XML Schema用于定义XML文档的结构和数据类型,它提供了一种方式来验证接收到的XML数据是否符合规范。 4. **HTTP POST请求**:POST请求常用于向服务器发送数据,如表单提交。在XML提交的...
这些文件可能包含了XML的语法详解、实例演示、DOM操作、XML Schema定义、XSLT转换技巧以及XMLHttp请求的使用方法、错误处理、跨域问题等内容。 XML的DOM处理涉及将XML文档解析为一棵节点树,每个节点代表XML文档的...
以上就是关于Ajax面试题中涉及的一些核心知识点,包括XML的基础、DOM操作、XML Schema、DTD、XPath、XQuery、XSLT以及Asp.NET的XML处理和Web Service的理解。这些内容对于理解Ajax的工作原理和实际应用至关重要。在...
XML文档遵循严格的规则,包括文档类型定义(DTD)或XML Schema,以确保数据的一致性和有效性。 ### 留言板系统架构 1. **数据存储**:在基于XML的留言板系统中,每条留言会被表示为一个XML元素,包含留言内容、...
2. **文档类型定义(DTD, Document Type Definition)** 或者 **XML Schema(XSD)**:定义元素和属性的结构,确保文档合法性。 3. **注释(Comment)**:用 `<!-- 这里是注释 -->` 来添加解释性文本。 4. **实体...