用XML做通讯录实验报告

合集下载

XML同学录实验报告

XML同学录实验报告

二 实验要求
设计一个同学通讯录显示网页,以表格的形式进行显示,并能够
分页显示。当点击表格中某个同学的通讯信息时,能够单独显示该同
学的详细通讯信息。同学的通讯信息用 XML 文档存储。
也可以设计其它信息的显示网页,要求同上通讯录显示网页。
三 实验原理
XML 数据岛是指嵌入 HTML 文档中的扩展标记信息。XML 数据
信息科学与工程学部 XML 基础 实验报告
年级 学号
姓名
成绩
专业
实验地点
指导教师
实验项目 XML 数据岛与 HTML 的绑定 实验日期
一 实验目的
1.理解 XML 数据岛和数据源对象的概念;
2.掌握数据绑定的方法;
3.熟悉 HTML 文档中嵌入 XML 数据的方法;
4.掌握 HTML、脚本语言与 XML 结合的方法。
<QQ>53726486</QQ> </student > <student id="0036" sex="男" amount="100" remain="无" discount="8.3">
<name>王铭铭</name> <banji>软件 1 班</banji> <add>河大新区</add> <tel>15837264527</tel> <hometown>唐山</hometown>
<QQ>7346383</QQ> </student > </students> 2、HTML 文档中嵌入 XML 数据,XML 数据岛与 HTML 的绑定主要代码如下:

安卓通讯录实训报告

安卓通讯录实训报告

安卓实训设计报告安卓通讯录设计题目:安卓通讯录班级:姓名:学号:指导老师:日期: 2012年6月7日容要求一、题目分析,功能要求。

1.1 实验目的熟悉Android软件开发的基本架构利用Eclipse和ADT插件设计通讯录1.2 功能本手机通讯录工具主要实现五大功能:联系人的查询:字段查询,分组查询,字母排序查询;增加、删除联系人以及修改联系人信息;导入、导出联系人;发送联系人信息;设置。

二、实验设计2.1 UI设计我们用一个ListView来显示整个通讯录,其中用TextView显示每一记录,他们的xml文件分别为:main.xml(通讯录主界面),addres.xml(添加联系人界面),list_item.xml(浏览联系人界面),find.xml(查找联系人界面)。

2.2功能的设计为了在主界面中浏览联系人的信息,并且创建主要菜单栏,我们设计了MainActivity类,主要用于显示联系人信息和菜单栏,通过菜单栏,实现通讯录的相关功能。

AddressBook类主要是为了实现联系人的添加功能,并且实现信息的保存后跳转到主界面。

Findactivity类主要是为了实现联系人的查找功能,输入联系人的,点击查找按钮,显示所查联系人的相关信息。

三、实验程序四、实验效果图五、总结通过设计该通讯录,主要学习了UI设计、数据库的综合操作、动态菜单的使用以及各种权限的注册。

通过本次设计,使我对Android平台的数据库操作有了更进一步的理解,同时也对Android系统有了更深入的了解。

附录一//定义数据public class ContactColumn implements BaseColumns{public ContactColumn(){}//列名public static final String NAME = "name"; //public static final String MOBILENUM = "mobileNumber"; //移动public static final String HOMENUM = "homeNumber"; //家庭public static final String ADDRESS = "address"; //地址public static final String EMAIL = "email"; //public static final String BLOG = "blog"; //博客//列索引值public static final int_ID_COLUMN = 0;public static final int NAME_COLUMN = 1;public static final int MOBILENUM_COLUMN = 2;public static final int HOMENUM_COLUMN = 3;public static final int ADDRESS_COLUMN = 4;public static final int EMAIL_COLUMN = 5;public static final int BLOG_COLUMN = 6;//查询结果public static final String[] PROJECTION ={_ID,NAME,MOBILENUM,HOMENUM,ADDRESS,EMAIL,BLOG,};}public class DBHelper extends SQLiteOpenHelper{public static final String DATABASE_NAME = "mycontacts.db";//数据库名public static final int DATABASE_VERSION = 2; //版本public static final String CONTACTS_TABLE = "contacts"; //表名//创建表private static final String DATABASE_CREATE ="CREATE TABLE " + CONTACTS_TABLE +" ("+ ContactColumn._ID+" integer primary key autoincrement,"+ +" text,"+ ContactColumn.MOBILENUM+" text,"+ ContactColumn.HOMENUM+" text,"+ ContactColumn.ADDRESS+" text,"+ ContactColumn.EMAIL+" text,"+ ContactColumn.BLOG+" text);";public DBHelper(Context context){super(context, DATABASE_NAME, null, DATABASE_VERSION);}public void onCreate(SQLiteDatabase db){db.execSQL(DATABASE_CREATE);}public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){db.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE);onCreate(db);}}// URI类型转换public String getType(Uri uri){switch (uriMatcher.match(uri)){case CONTACTS:return"vnd.android.cursor.dir/vnd.yarin.android.mycontacts";case CONTACT_ID:return"vnd.android.cursor.item/vnd.yarin.android.mycontacts";default:throw new IllegalArgumentException("Unsupported URI: " + uri);}}// 删除指定数据列Overridepublic int delete(Uri uri, String where, String[] selectionArgs){int count;switch (uriMatcher.match(uri)){case CONTACTS:count = contactsDB.delete(CONTACTS_TABLE, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);count = contactsDB.delete(CONTACTS_TABLE,ContactColumn._ID+ "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""),selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}// 插入数据public Uri insert(Uri uri, ContentValues initialValues){if (uriMatcher.match(uri) != CONTACTS){throw new IllegalArgumentException("Unknown URI " + uri);}ContentValues values;if (initialValues != null){values = new ContentValues(initialValues);Log.e(TAG + "insert", "initialValues is not null");}else{values = new ContentValues();}// 设置默认值if (values.containsKey() == false){values.put(, "");}if (values.containsKey(ContactColumn.MOBILENUM) == false){values.put(ContactColumn.MOBILENUM, "");}if (values.containsKey(ContactColumn.HOMENUM) == false){values.put(ContactColumn.HOMENUM, "");}if (values.containsKey(ContactColumn.ADDRESS) == false){values.put(ContactColumn.ADDRESS, "");}if (values.containsKey(ContactColumn.EMAIL) == false){values.put(ContactColumn.EMAIL, "");}if (values.containsKey(ContactColumn.BLOG) == false){values.put(ContactColumn.BLOG, "");}Log.e(TAG + "insert", values.toString());long rowId = contactsDB.insert(CONTACTS_TABLE, null, values);if (rowId > 0){Uri noteUri = ContentUris.withAppendedId(CONTENT_URI, rowId);getContext().getContentResolver().notifyChange(noteUri, null);Log.e(TAG + "insert", noteUri.toString());return noteUri;}throw new SQLException("Failed to insert row into " + uri);}// 更新数据库public int update(Uri uri, ContentValues values, String where, String[] selectionArgs){int count;Log.e(TAG + "update", values.toString());Log.e(TAG + "update", uri.toString());Log.e(TAG + "update :match", "" + uriMatcher.match(uri));switch (uriMatcher.match(uri)){case CONTACTS:Log.e(TAG + "update", CONTACTS + "");count = contactsDB.update(CONTACTS_TABLE, values, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);Log.e(TAG + "update", contactID + "");count = contactsDB.update(CONTACTS_TABLE, values, ContactColumn._ID + "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""), selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}}public boolean onPrepareOptionsMenu(Menu menu){super.onPrepareOptionsMenu(menu);final boolean haveItems = getListAdapter().getCount() > 0;if (haveItems){Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());Intent[] specifics = new Intent[2];specifics[0] = new Intent(Intent.ACTION_EDIT, uri);specifics[1] = new Intent(Intent.ACTION_VIEW, uri);MenuItem[] items = new MenuItem[2];//添加满足条件的菜单Intent intent = new Intent(null, uri);intent.addCategory(Intent.CATEGORY_ALTERNATIVE);menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items);if (items[0] != null){//编辑联系人items[0].setShortcut('1', 'e').setIcon(R.drawable.edituser).setTitle(R.string.editor_user);}if (items[1] != null){//查看联系人items[1].setShortcut('2', 'f').setTitle(R.string.view_user).setIcon(R.drawable.viewuser);}}else{menu.removeGroup(Menu.CATEGORY_ALTERNATIVE);}return true;}<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="schemas.android./apk/res/android"package=".yarin.android.MyContacts"android:versionCode="1"android:versionName="1.0"><application android:icon="drawable/icon" android:label="string/app_name"><provider android:name="ContactsProvider"android:authorities=".yarin.android.provider.ContactsProvider"/><activity android:name=".MyContacts"android:label="string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/></intent-filter></activity><activity android:name=".ContactEditor"android:label="string/editor_user"><intent-filter><action android:name="android.intent.action.EDIT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><action android:name="android.intent.action.INSERT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity><activity android:name=".ContactView"android:label="string/view_user"><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity></application><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission><uses-permission android:name="android.permission.SEND_SMS"></uses-permission><uses-permission android:name="android.permission.RECEIVE_SMS"/><uses-sdk android:minSdkVersion="5"/></manifest>。

xml实验报告

xml实验报告

xml实验报告XML实验报告一、引言XML(可扩展标记语言)是一种用于描述、存储和传输数据的标记语言。

它具有自我描述性、可扩展性和跨平台性的特点,被广泛应用于各种领域。

本实验旨在通过实际操作,深入了解XML的基本概念、语法和应用。

二、实验目的1. 掌握XML的基本语法和标记规则;2. 学会使用XML解析器解析和处理XML文档;3. 熟悉XML的应用场景,如数据存储、数据交换等。

三、实验环境与工具实验环境:Windows 10实验工具:文本编辑器、XML解析器四、实验过程1. 创建XML文档在文本编辑器中创建一个新的文件,并保存为"experiment.xml"。

XML文档的根元素应该使用尖括号括起来,并且以问号结尾。

在根元素内部,可以定义各种元素和属性。

2. 定义元素和属性在XML文档中,元素用于表示数据的结构和层次关系,属性则用于描述元素的特性和属性值。

通过在尖括号内添加元素名和属性名,可以定义元素和属性。

3. 编写文档内容在XML文档中,可以使用文本、标记和注释等方式来编写文档内容。

文本用于表示实际的数据值,标记用于表示数据的结构,注释则用于添加对文档的说明和解释。

4. 保存并验证XML文档在完成XML文档的编写后,保存文件并使用XML解析器进行验证。

XML解析器可以检查文档的语法和结构是否符合XML规范,以确保文档的正确性。

五、实验结果与分析通过以上实验步骤,我们成功创建了一个简单的XML文档,并使用XML解析器进行验证。

在实际应用中,XML可用于数据存储、数据交换和配置文件等多个场景。

例如,在Web开发中,XML可用于存储和传输网页内容、配置文件和用户数据等。

在移动应用开发中,XML可用于定义应用界面、数据传输和应用配置等。

此外,XML还广泛应用于企业数据交换、电子商务和科学研究等领域。

六、实验总结通过本次实验,我们深入了解了XML的基本概念、语法和应用。

XML作为一种通用的数据描述语言,具有自我描述性、可扩展性和跨平台性的特点,被广泛应用于各个领域。

xml实验报告

xml实验报告

目录第一章实验课程基本信息 (2)第二章如何编写格式良好的XML文档 (2)2.1实验目的 (2)2.2实验要求 (2)2.3实验过程 (3)2.3.1分析过程 (3)2.3.2XML文档编写过程 (3)2.4注意事项 (4)第三章编写DTD和有效的XML实例文档 (5)3.1实验目的 (5)3.2实验要求 (5)3.3实验过程 (5)3.3.1分析过程 (5)3.3.2DTD文档的编写过程 (6)3.4注意事项 (10)第四章编写Schema和有效的XML文档 (10)4.1实验目的 (10)4.2实验要求 (10)4.3实验过程 (11)4.3.1分析过程 (11)4.3.2Schema的编写方式 (11)4.4注意事项 (13)第五章XML文档的转换 (13)5.1实验目的 (13)5.2实验要求 (13)5.3实验过程 (14)5.3.1分析过程 (14)5.3.2XHTML实验编写基本过程 (14)5.4注意事项 (18)第六章DOM编程 (18)6.1实验目的 (18)6.2实验要求 (18)6.3实验过程 (18)6.3.1分析过程 (18)6.3.2DOM编写的基本过程 (19)6.4注意事项 (22)XML编程实验摘要XML自推出以来,尤其是在1998年2月成为W3C推荐标准以来,受到了广泛的支持。

各大软件厂商如IBM、Microsoft、Oracle、Sun等都积极支持并参与XML的研究和产品化工作,先后推出了支持XML的产品或者将改造原有的产品以支持XML,W3C也一直致力于完善XML的整个理论体系。

XML虽然获得了极大的支持,但是它还有很长的路要走。

首先,XML的规则只是迈出了第一步,还有许多技术细节没有解决。

其次,现在虽然出现了一些XML工具和应用,但是其市场反应还有待进一步观察。

另外如何让更多的人迅速学会使用XML,并利用它进行开发,进而促进XML的应用也是一个问题。

XML实验报告

XML实验报告

XML实验报告计算机系实验报告实验课程:XML实验班级:⽹⼯(2)班学⽣姓名:学⽣学号:实验成绩:⼀、实验⽬的综合验证以下课程主要知识点:1.XML语法熟悉XML语法规范、能够编写形式良好的XML⽂档;2.DTD和xml Schema⽂档约束熟练使⽤DTD和XML Schema定义基本的XML元素、属性、限定等⽅⾯的模式约束。

3.SAX解析、DOM解析以及JAXP了解SAX和DOM解析原理,能够使⽤JAXP接⼝完成对XML⽂档的解析和转换。

4.XSLT和XPath能够使⽤XSLT和XPath完成从XML⽂档到HTML格式的转换。

⼆、实验内容1.编写XML⽂档约束根据下图中显⽰的信息,编写⼀个DTD⽂档,其内容要求能够包含图中所有的信息点。

2.编写⼀个XML⽂档,使其在DTD约束下是有效的假设上⼀步编写的DTD⽂档⽂件名为:books.dtd,编译⼀个XML⽂档使其在books.dtd ⽂件的约束下成为⼀个有效的XML⽂档。

然后,使⽤xmllint程序对你编写的XML⽂档进⾏有效性验证,具体如果使⽤,请参看“《XML》课程教案”中的相关内容。

3.使⽤JAXP接⼝,对上⼀步完成的XML⽂档进⾏解析假设上⼀步编写的XML⽂档名为books.xml。

1)使⽤SAX⽅式解析从XML⽂档books.xml中获得“书名”、“书号”、“作者”、“出版社”、“出版⽇期”这5个记录项的信息,并将其格式化输出到⼀个⽂件books.txt中。

books.txt中的信息格式如下所⽰:书名书号作者出版社出版⽇期--------------------------------------------------------------------name 1234 Tom 清华20112)使⽤DOM⽅式解析从XML⽂档books.xml中获取“书名”、“书号”、“作者”、“出版社”、“出版⽇期”,并将它们封装到⼀个javabean类中,然后利⽤该类中的数据,通过DOM构造⼀棵DOM⽂档树,并将其序列化到⼀个XML⽂件中simplebooks.xml。

《XML技术及应用》实验报告

《XML技术及应用》实验报告

《XML技术及应用》实验报告学生姓名:学生学号:指导教师:实验成绩:一、实验内容:1、通过Java 编程实现对“通讯录”的XML 文档的解析,并把解析结果存到数据库的表中。

2、进一步实现相反的过程,即将数据库表的内容读出来,并将其转化为XML 文件存储起来。

二、XML文档代码Student.xml<?xml version="1.0" encoding="GB2312"?><StudentInfo><student><name>Jimmey</name><sex>男</sex><address>台湾台北</address><phone>011-2857</phone></student><student><name>华晨宇</name><sex>男</sex><address>湖北武汉</address><phone>1809210</phone></student><student><name>Victorian</name><sex>女</sex><address>上海</address><phone>725120</phone></student><student><name>尼坤</name><sex>男</sex><address>韩国首尔</address><phone>9218337</phone></student></StudentInfo>三、对student.xml进行解析1、配置Access数据库控制面板----系统和安全------管理工具-----数据源(ODBC)-----系统DSN-----添加Access驱动程序-----填写数据源名、路径等。

西安邮电大学xml实验报告

西安邮电大学xml实验报告

一. 实验目的及实验环境
1.实验目的
(1)熟悉XML的文档结构和书写规则。

(2)熟悉DTD的文档规则和基本元素属性
2.实验环境
Dreamweaver、
二. 实验内容
(1)用XML来描述两个职工的信息,职工信息如实验表3.1所示。

实验表3.1 职工信息表
(2)试写一个DTD来检测描述学生信息的XML文档结构的正确性,具体文档要求为:学生包含姓名、年龄、电话号码等信息,其中电话号码可以有零个也可以有多个。

三.方案设计
四.测试数据及运行结果
1.正常测试数据(3组)及运行结果;
2.非正常测试数据(2组)及运行结果。

五.总结
1.实验过程中遇到的问题及解决办法;2.对设计及调试过程的心得体会。

六.附录:源代码(电子版)。

xml个人通讯薄设计实验报告

xml个人通讯薄设计实验报告

xml个人通讯薄设计实验报告xml个人通讯薄设计实验报告计算机与信息技术学院综合性、设计性实验报告专业:计算机科学与技术Java方向年级/班级:09级201*201*学年第一学期课程名称Xml基础指导教师本组成员学号姓名实验地点实验时间项目名称个人通讯薄设计实验类型综合性/设计性一、实验目的(1)掌握XML文档的基本语法,能够得到格式良好的XML文档;(2)掌握使用CSS显示XML文件的基本方法;(3)理解CSS与XSL的区别;(4)熟练掌握XSL不同的方式选择节点;(5)掌握XSL与CSS的结合使用;(6)通过上机操作可以了解自己对所学内容的掌握程度;二、实验仪器或设备实验仪器与设备:一台计算机xmlspy软件三、总体设计(设计原理、设计方案及流程等)(1)设计原理:利用CSS控制XML文档的显示;(2)设计方案:首先,要编写一个XML文档,文档主要包含通讯录里的内容。

然后,要编写CSS,CSS直接影响通讯录的显示情况。

所以,要重视它;(3)流程:自学CSS这一章的内容;收集要使用的图片;根据实验要求编写XML文档;编写CSS来确定通讯录的显示样式;实验步骤(包括主要步骤、代码分析等)四、(1)首先规划一下,编写XSL所需要的资源。

(2)创建CSS,使用基本语法编写,部分代码如下:通讯薄CLASSLYNAMESEXCONTACT河南师范大学计算机与信息技术学院ADDRESSSCHOOLPHOTOFriend姓名女15234304河南.郑州郑州大学Friend姓名伟男18756182河南..虞城吉大学Classmate姓名琳女1591264河南.河大学Classmate姓名心河南师范大学计算机与信息技术学院女159********河南.河大学Family行名霞女159********河虞一高Css代码如下:.span1{color:blue;font-size:2cm;face:华文楷体;margin-left:40%;}.tag_box{width:100%;height:90%;border:1pxsolid#B0BEC7;font:12pxArial,Helvetic a,sans-serif;margin:5%;background-image:url(3.gif);}.tag_boxul.menulist{width:100%;hmargin-top:1px;border:1pxsolid#788a98;}五、结果分析与总结河南师范大学计算机与信息技术学院(1)通过该实验,学会了XSL与css文档的书写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。








学院:
专业:
学号:
姓名:
计算机与信息技术学院综合性、设计性实验报告
专业:年级/班级:学年第学期
课程名称XML基础指导教师
本组成员
学号姓名
实验地点实验时间
项目名称个人通讯薄一的设计与实现实验类型综合性
一、实验目的
1、掌握XML文档的基本语法,能够得到格式良好的XML文档;
2、能够了解并掌握XML DTD的定义方法及其用途;
3、能够熟练使用XMLSPY来创建DTD文件及对应的有效的XML文件,并进行验证;
二、实验仪器或设备
学院提供公共机房,1台学生微型计算机。

三、总体设计(设计原理、设计方案及流程等)
设计原理:按照XML、DTD的语法规则来编写、保存文件XML、DTD文件。

设计方案及流程:
利用XML文档作为存储载体来存储个人通讯薄,按照以下要求设计并实现该通讯薄:
1、内含同学(classmate)、朋友(friend)、家人(home)等人员。

每条通讯录至少包
含以下信息:
a、姓名(name):必须有一个,其中包含一个枚举类型的性别(sex)属性;
b、性别(sex):必须有一个;
c、联系方式(tel):必须有一个;
d、QQ号:一个或多个;
e、地址(address):一个或多个;
f、备注(other):一个或多个;
g、根据需要可添加其它字段。

2、为该XML文档,编写DTD文档。

四、实验步骤(包括主要步骤、代码分析等)
1、按照以上设计编写一个规范的XML文档
<?xml version="1.0" encoding="UTF-8"?>
这句话放为XML文件的声明,作为文件的第一行,在其前面不能有空白、其他处理指令或注释。

XML声明以<?xml标识开始、以?>标识结束。

在该XML声明中,属性version 的值为1.0,指出了该XML文件使用的XML版本,目前该属性的值只可以取1.0。

属性encoding规定XML文件采用哪种字符集进行编码,在这encoding的值为“UTF-8”,那么标记的名字以及标记包含的文本内容中就可以使用汉字、日文、英文等。

最后,文件在保存的时候必须选择UTF-8编码来保存,否则会出错。

如果在XML声明中没有指定encoding的值,那么该属性的默认值为UTF-8。

在XML文档中,有且仅有一个根标记,其他标记都必须封装在根标记中如图所示:
在该XML文件中,根标记的名字为“txl”,在根标记中封装了一个或多个名字为“title”、“classmate”、“friend”、“home”的标记。

在名为“classmate”、“friend”、“home”
的标记下,又都包含了名为“name”、“sex”、“tel”、“QQ”、“address”、“other”的子标记,他们分别包含了姓名、性别、联系方式、QQ号、地址、备注这些信息。

至此,该XML文件可以称为一个规范的XML文件。

使用XMLSpy,使用按钮检验XML文件的规范性,所得结果为:
2、为该XML文档编写DTD文档,使其成为一个有效的XML文档
一个有效的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的约束条件,就称为有效的XML。

DTD通过其中的元素来限制XML文件中的标记。

下列元素:<!ELEMENT txl (title,classmate+,friend+,home+)>约束XML文件的根标记“txl”可以有一个名为“title”的子标记,一个或多个名为“classmate”、“friend”、“home”的子标记,不可以有任何其他名称的子标记。

下列元素:<!ELEMENT classmate (name,sex,tel,QQ+,address+,other+)>
<!ELEMENT friend (name,sex,tel,QQ+,address+,other+)>
<!ELEMENT home (name,sex,tel,QQ+,address+,other+)>
约束了XML文件中名称为“classmate”、“friend”、“home”的标记恰好顺序地包含有名称分别为“name”、“sex”、“tel”、“QQ”、“address”和“other”子标记,而且约束名称为“classmate”、“friend”、“home”的标记包含的内容不可以有可显示的字符(允许含有空格、回行等空白字符)。

下列元素:<!ELEMENT title (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT QQ (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT other (#PCDATA)>
分别约束了XML文件中名称为“name”、“sex”、“tel”、“QQ”、“address”和“other”的标记所包含的内容只可以是文本数据,不可以包含有子标记。

在该XML文档中,name的sex属性是枚举类型,那么该属性只可以是枚举给出的值,即属性可以取的值是用符号“|”分隔的几个字符串中的任何一个。

下列元素:
<!ATTLIST name sex (男|女) #REQUIRED>约束了约束了sex属性值可以是男/女。

在保存DTD文件时,要选择“UTF-8”编码方式保存(在保存DTD文件时所选择的编码必须和它要约束的XML文件保持一致)。

在XML文件中,可以使用“文档类型声明”使当前XML文件与一个DTD文件相关联。

如:<!DOCTYPE txl SYSTEM "TXL.dtd"> 其中txl为XML文件的根标记,“TXL.dtd”是与该XML文件相关连的DTD的URI,即使用SYSTEM文档类型声明的格式为:<!DOCTYPE 根标记的名称 SYSTEM “DTD文件的URI”>。

使用XMLSpy,用按钮检验XML文件的有效性,所得结果为:
,所以,现在得到的XML文件是一个有效的XML文件。

五、结果分析与总结
一个规范的XML文件,应当满足以下语法规则:XML文件用“XML声明”开始;XML 文件有且仅有一个根标记;XML的非根标记必须封装在根标记中;非空标记必须由“开始标签”和“结束标签”构成;空标记没有“开始标签”和“结束标签”;XML文件中的全体标记必须形成树形结构,即标记不允许出现交叉。

在编写的XML文件中,如果选择的编码方式为“UTF-8”,XML文件必须选择UTF-8编码来保存;如果选择的编码方式为“gb2312”或“ISO-8859-1”,XML文件必须选择ANSI编码保存。

如果不按以上方式保存,会出错。

如果在要XML文档中使用特殊字符,可以使用字符引用或CDATA段。

如以下代码(CDATA段)
在浏览器中显示效果如下:
以下代码(实体引用):
显示如下:
在DTD文件中,元素的定义以“<!ELEMENT”开始,以“>”结束,其中,“<!ELEMENT”中的“<”、“!”和“ELEMENT”之间不能有空格。

在DTD文件中,用关键字ELEMENT定义一个元素(<!ELEMENT 标记名称标记的约束条件>)时,“<!ELEMENT”、“标记名称”和“标记的约束条件”之间必须有空格,若没有,则会报错。

如:把以上DTD文件中的
<!ELEMENT other (#PCDATA)>改为<!ELEMENTother(#PCDATA)>,打开XML文件时,会出现以下结果:
除此之外,DTD文件中元素的作用与其在DTD文件中的书写位置无关,DTD文件中不允许使用多个元素约束同一个标记。

需要特别注意的是:DTD文件是由元素构成的文本文件,需要使用文本编辑器编写、保存,在保存DTD文件时,选择的编码必须和它要约束的XML文件保持一致。

如不一样,检验有效性时会报错,例如本应该以“UTF-8”编码保存的,用“ANSI”编码保存,在
有汉字的地方会报错:
要想完成一个规范的、有效的XML文件,必须要按照XML、DTD的语法规则来编写、保存文件,这样才能避免出错。

教师签名:
年月日。

相关文档
最新文档