以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XML基础 』 (http://bbs.xml.org.cn/list.asp?boardid=1) ---- XML初学进阶学习笔记[原创](整理完整版) (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=28676) |
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:20:00 AM -- XML初学进阶学习笔记[原创](整理完整版) 简体中文码:GB2312 繁体中文码:BIG5 西欧字符: UTF-8
我们前面说到的那个信件署名就是一般实体。定义一般实体的格式如下: 关于刚才的信件署名的实体定义如下: <!ENTITY lettersign 另外,你也可以指定一个实体代替一个外部文件的内容,此时要使用SYSTEM这个关键字。例如: <!ENTITY lettersign 在这个例子中,XML处理器将用指定文件的内容来替换实体指示。 <!ENTITY % 实体名 "文本内容"〉 4、实体声明 <?xml version="1.0"?> 5、实体引用 简而言之,实体引用指的是引用一个在实体声明中已经声明过的一个实体。实体引用的形式很简单: &实体名; 在引用XML实体之前,必须已经在XML文件中对此实体进行过声明; %实体名; 7、实体引用不仅可以出现在字符数据中,还可以出现在标记的属性中。例如下面这个例子: <联系人 公司=“B公司” 地址=“&B公司地址;”> 如果在属性中出现实体引用,不但要遵守前面所述的实体引用的种种规则,还要注意以下两点: 在标记属性中不能引用一个外部实体。 8、使用外部DTD时,要在DOCTYPE中使用关键字SYSTEM。实际上,SYSTEM不是引用外部DTD的唯一方法, 当使用关键字PUBLIC进行引用时,这个外部DTD还需要得到一个标识名。引用公共DTD的形式为: <!DOCTYPE 根元素 PUBLIC "DTD名称" "外部DTD的URL"> 无论是哪一种情况,开始部分后面都跟着两个斜杠“//”及DTD所有者的名称。在这个名称之后又是两个斜杠“//”, <!DOCTYPE 联系人列表 PUBLIC "-//Luna Dong//Contact Data//CN" 10、除了根元素外,在定义其它元素时使用关键字ANY都是不好的习惯。一般来说,在写一个XML文件时需要严格遵循DTD的规则, |
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:20:00 AM -- 11、在定义元素时,ETD的顺序是无关紧要的。因此 <!ELEMENT 姓名(#PCDATA)> <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人(姓名)> 和 <!ELEMENT 联系人列表 ANY> <!ELEMENT 联系人(姓名)> <!ELEMENT 姓名(#PCDATA)> 所定义的文件结构是完全相同的。 13、最后再次强调一下元素的命名。元素名的第一个字母必须是字母、或下划线(_)、或冒号(:), 14、 元 字 符 含 义 + 出现一次或多次 16、XML正则表达式的匹配原则不允许循环逻辑。所以,OR的意思是或者选这个或者选那个,但不能两个都选,也不能两个都不选。 17、注意:在一个组中,只允许使用一种连接符(例如“,”或“|”)。因此,象下面这样定义的DTD是不合法的: <!ELEMENT 联系人(姓名,电话|EMAIL)> 要想使用多种连接符,只有通过创建子组的方式,使用 <!ELEMENT 联系人(姓名,(电话|EMAIL))> 前面我们已经介绍了所有可能用到的子元素的排列状况。不过,还有一种情况没有说,那就是,一个元素中不包含任何子元素,也不包含纯文本。 对于这种情况,我们可以定义一个空标记。当然,定义这样一个标记很简单,你只需要使用关键字EMPTY就可以了,例如: <!ELEMENT HR EMPTY> 这样,在你的XML文件中,就可以使用一个空元素<HR/>。 18、IDREF类型允许一个元素的属性使用文件中的另一个元素,方法就是把那个元素的ID标识值作为该属性的取值。 19、参数实体专门用在DTD中。定义方式是: <!ENTITY % 实体名 "实体内容"> 或: schema <!ENTITY % 实体名 SYSTEM "外部文件名"> 引用方式为: %实体名; 20、使用参数实体,可以方便元素和属性的声明。例如: <!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址"> |
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:21:00 AM -- 21、dt:type dt:type指定所声明属性的数据类型,它除了支持DTD中包含的全部十大数据类型外,还支持一些扩展属性,在下一小节会详细讲述。 Schema中的十个基本属性与DTD中属性的对应关系请见下表: 注意,当dt:type取值为"enumeration"时,后面的dt:value必须列出所有可能的取值。 22、attribute实际上是对该Schema中AttributeType声明的引用,而具体引用什么属性类型, 23、XML较之HTML最根本的差别在于XML是定义置标语言的元语言, 24、CSS和XSL均属于样式单的一种,都可以用来设定文档的外观。那么,它们有什么区别呢? 用途不同 DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式, 26、SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同, |
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:22:00 AM -- 27、XML DOM初学者指南 目录: 简介 DOM是什么 如何使用DOM 如何Load一个文档 处理错误 如何从XML文档中取得信息 如何遍历XML文档 下一步该干什么 简介: 作为VB的开发者你可能会接触eXtensible Markup Language (XML)文档。你现在想处理XML文档并把它集成到你的方案中。你可以自己编程解析,把它当普通文本文档处理,但这样作太没有效率了,没有利用XML的强大之处:它可以结构化的表示数据。 从XML文件中获得信息最好的办法是利用XML解析器。解析器,简单的讲,就是一个软件,它可以使XML文件中的数据易于使用。作为VB的开发者,你可能想得到一个支持Document Object Model (DOM)的解析器。DOM描述了一系列标准的访问XML和HTML文档的方法,这些方法解析器应该实现。一个支持DOM的解析器应该把XML中的数据变成一系列对象,这样就可以对这些对象二次编程。在这篇文章中,你会学习如何利用Microsoft 解析器(Msxml.dll)实现的DOM结构访问和维护XML文档。 在我们继续前进时,让我们先看一段XML代码来了解这个解析器怎样使我们生活变得容易。下面这个叫cds.xml的文档用来表示一个唱片的各个项目,每个项目包含象主唱,标题,音轨这样的信息。 <? xml version="1.0"?> <! DOCTYPE compactdiscs SYSTEM "cds.dtd"> <compactdiscs> <compactdisc> <artist type="individual">Frank Sinatra</artist> <title numberoftracks="4">In The Wee Small Hours</title> <tracks> <track>In The Wee Small Hours</track> <track>Mood Indigo</track> <track>Glad To Be Unhappy</track> <track>I Get Along Without You Very Well</track> </tracks> <price>$12.99</price> </compactdisc> <compactdisc> <artist type="band">The Offspring</artist> <title numberoftracks="5">Americana</title> <tracks> <track>Welcome</track> <track>Have You Ever</track> <track>Staring At The Sun</track> <track>Pretty Fly (For A White Guy)</track> </tracks> <price>$12.99</price> </compactdisc> </compactdiscs> 上面的文档的第二行引用了一个外部DTD(文档类型描述),DTD描述了一个特定类型的XML的层次结构和能包括的内容。XML解析器利用DTD来验证XML文档的正确性。DTD只是你用来让解析器验证XML文档是否合法的办法的一种,另一个越来越受欢迎的方法是XML Schemas,它用XML来描述Schemas而不是DTD。与DTD不同的是, Schema是用XML来描述的,也就是使用它自己的"有趣的"语法。 下面的文档是cds.xml用到的cds.dtd。 <! ELEMENT compactdiscs (compactdisc*)> <! ELEMENT compactdisc (artist, title, tracks, price)> <! ENTITY % Type "individual | band"> <! ELEMENT artist (#PCDATA)> <! ATTLIST artist type (%Type;) #REQUIRED> <! ELEMENT title (#PCDATA)> <! ATTLIST title numberoftracks CDATA #REQUIRED> <! ELEMENT tracks (track*)> <! ELEMENT price (#PCDATA)> <!ELEMENT track (#PCDATA)> 本文不会对DTD和XML Schemas讨论过深,基于XML-DATA的XML Schema Reference已提交给W3c。 DOM是什么:
XML DOM结构将XML文档的内容实现为一个对象模型。W3C的DOM Level 1 说明定义了DOM结构如何实现属性,方法,事件等等。微软的DOM实现完全支持W3C标准,并且还有许多使程序更容易访问XML文件的新增特点。 如何使用DOM 要使用DOM,需要创建一个XML解析器的实例。微软公司在Msxml.dll中创建了一系列标准的COM接口来使创建实例变得可能。Msxml.dll中包含了类型库和可应用的代码,这些你可以用来处理XML文件。如果你使用可实现脚本的客户端,比如VBScript 和IE,你可以使用CreateObject方法来得到解析器的实例。 Set objParser = CreateObject( "Microsoft.XMLDOM") 如果你使用ASP (Active Server Page),你使用Server.CreateObject方法。 Set objParser = Server.CreateObject( "Microsoft.XMLDOM" ) 如果你在使用VB,你可以创建一个对MSXML类型库的引用,这样就可以访问DOM。要在VB6.0中使用MSXML,操作如下: 打开Project References项 你可以通过两个途径获得Msxml.dll。 你可以安装IE5.0,MSXML解析器是其中集成的部件。 你可能有一些迷惑,我该干些什么?如果你打开MSXML库,用Visual Basic 6.0对象察看器察看其中的对象模型,你会发现很丰富。本文会告诉你如何利用DOMDocument类和IXMLDOMNode界面来访问XML文档。
如何Load一个文档: 要调入一个XML文档,先必须创建一个DOMDocument的实例。 Dim xDoc As MSXML.DOMDocument Set xDoc = New MSXML.DOMDocument 当你获得一个合法的引用,你就可以用LOAD方法来调入一个文档。解析器可以从本地硬盘调入或者通过UNC和URL从网络上调入。 从硬盘调入如下: If xDoc.Load("C:\My Documents\cds.xml") Then ' 文档调入成功 ' 作我们喜欢作的事 Else ' 文档调入失败 End If 当你完成工作,你需要释放掉这个引用,MSXML没有直接实现CLOSE方法,你最好直接将它设置成Nothing来关闭它。 Set xDoc = Nothing 当你调用一个文档,默认是异步进行,你可以通过修改Async属性来更改它。如果你要操作文档,你必须先检查ReadyState属性来确认文档的状态,它会返回五种可能的结果。 状态 未初始化:调入文档没有开始 调入:Load方法正在执行 调入完成:Load 方法已经完成 交互阶段:DOM可以进行只读检验,数据部分解析 完成:数据完全解析,可以进行读/写操作。 4 MSXML解析器实现了一些有用的方法,你在调入一个大的文档时可以用这些方法追踪调入过程的状态。这些方法对从Internet上异步的调入文档也很有帮助。 要打开一个Internet上的文档,你需要提供绝对URL,并且必须加http://前缀。下面是一个例子。 xDoc.async = False If xDoc.Load("http://www.develop.com/hp/brianr/cds.xml") Then ' 文档调入成功 ' 作我们喜欢作的事 Else ' 文档调入失败 End If 将Async属性设置为False,这样在文档调入完成之前,解析器不会将控制权交给你的代码。如果把Async保存为True,你在访问文档时必须检查ReadyState属性或者利用DOMDocument的事件在文档可以访问时提示你的代码。 处理错误: 你的文档可能因为各种原因而调入失败,最常见的原因是提供给解析器的文档名不正确,另一个常见的原因是XML文档不合法。 默认的解析器会验证你的文档是否符合某个DTD 或者 schema,你可以不让解析器执行验证,在执行Load方法之前,将DOMDocument的属性ValidateOnParse为False。 Dim xDoc As MSXML.DOMDocument Set xDoc = New MSXML.DOMDocument xDoc.validateOnParse = False If xDoc.Load("C:\My Documents\cds.xml") Then ' 文档调入成功 ' 作我们喜欢作的事 Else ' 文档调入失败 End If 事先关闭验证功能不是个好主意,它会带来许多问题,至少它会是你提供错误格式的数据给你的用户。 你可以通过访问ParseError对象来从解析器那儿获得有关错误类型的信息。创建一个IXMLDOMParseError界面的引用,然后把它指向文档自身的ParseError对象。IXMLDOMParseError界面实现了七种属性来使你获得错误原因。 下面的例子显示了一个信息框,列出了ParseError对象中所有错误信息。 Dim xDoc As MSXML.DOMDocument Set xDoc = New MSXML.DOMDocument If xDoc.Load("C:\My Documents\cds.xml") Then ' 文档调入成功 ' 作我们喜欢作的事 Else ' 文档调入失败 Dim strErrText As String Dim xPE As MSXML.IXMLDOMParseError ' 获得parseError对象 Set xPE = xDoc.parseError With xPE strErrText = "你的XML Document 不能调入" & _ "原因是." & vbCrLf & _ "错误 #: " & .errorCode & ": " & xPE.reason & _ "Line #: " & .Line & vbCrLf & _ "Line Position: " & .linepos & vbCrLf & _ "Position In File: " & .filepos & vbCrLf & _ "Source Text: " & .srcText & vbCrLf & _ "Document URL: " & .url End With
MsgBox strErrText, vbExclamation End If
Set xPE = Nothing 你可以利用parseError对象来向你的用户报告错误信息,或者把它写入你个Log中,你还可以尝试自己解决遇到的问题。
如何从XML文档中取得信息: 一旦你成功的调入了文档,下一步就是如何从中获得信息了。当你操作文档时,你经常会用到IXMLDOMNode界面,你利用它来读/写各个分离的节点元素。在使用它之前,你必须先理解MSXML支持的13种节点元素类型,下面是最常用的几个。
DOM节点类型 NODE_ELEMENT NODE_ATTRIBUTE NODE_TEXT NODE_PROCESSING_INSTRUCTION NODE_DOCUMENT_TYPE 你通过IXMLDOMNode界面实现的两个属性来访问节点的类型。NodeType属性列举了DOMNodeType所有项目(一些项目列举在上面的表格上)。另外,你可以用NodeTypeString属性来获得表示节点类型的字符串。 一旦你有了文档的DOM引用,你就可以遍历节点的层次。通过文档引用,你可以访问ChildNodes属性,它给出了一个自上而下的包含所有节点的目录。ChildNodes属性实现了IXMLDOMNodeList,它支持Visual Basic的For/Each结构,所以你可以列举出ChildNodes中的所有节点。另外,ChildNodes属性还实现了Level属性,它可以返回所有子节点的数目。 不只是文档对象有ChildNodes属性,每一个节点都有ChildNodes属性。因为如此,ChildNodes属性和IXMLDOMNode's HasChildNodes属性配合,使你非常方便的遍历文档,访问元素,属性,值。 值得一提的是,元素和元素值之间是父子关系。例如在 CDs XML文档中,元素<title>表示歌曲的名字,要知道<title>的值,你需要访问节点的属性NODE_TEXT。如果你发现一个节点有你感兴趣的数据,你可以访问它的属性,也可以通过ParentNode属性来访问它们的父节点。 如何遍历XML文档: 你能够遍历文档的节点是利用文档对象,因为XML本身就是层次结构,所以很容易编写递归代码来访问整个文档。 LoadDocument程序打开XML文档,然后调用另一个程序DisplayNode,它用来显示文档的结构。LoadDocument传递给正在打开的XML文档的ChildNodes属性一个引用作为它的参数,同时传递一个整数用来标示开始显示的层次级别。代码利用参数来格式化在Visual Basic文档结构显示窗口中的文本。 DisplayNode属性的函数会遍历文档寻找需要的NODE_TEXT节点类型串,一旦代码找到一个NODE_TEXT的节点,它会利用NodeValue属性来获得相应的文本串。另外,当前节点的ParentNode属性指向一个元素类型的节点。元素节点实现了一个NodeName属性,
NodeName和NodeValue属性会被显示。 如果一个节点还有子节点,通过检测HasChildNodes属性确认,DisplayNode就会调用自己知道遍历文档的全部。
下面这个DisplayNode程序用Debug.Print向Visual Basic窗口写入相关信息。 Public Sub LoadDocument() Dim xDoc As MSXML.DOMDocument Set xDoc = New MSXML.DOMDocument xDoc.validateOnParse = False If xDoc.Load("C:\My Documents\sample.xml") Then ' The document loaded successfully. ' Now do something intersting. DisplayNode xDoc.childNodes, 0 Else ' The document failed to load. ' See the previous listing for error information. End If End Sub Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _ ByVal Indent As Integer) Dim xNode As MSXML.IXMLDOMNode Indent = Indent + 2
For Each xNode In Nodes If xNode.nodeType = NODE_TEXT Then Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _ ":" & xNode.nodeValue End If If xNode.hasChildNodes Then DisplayNode xNode.childNodes, Indent End If Next xNode End Sub DisplayNode用HasChildNodes属性来确认是否再次调用自己,你也可以用节点的Level属性,如果大于0,则有子节点。 下一步该干什么: 这仅仅是个开始,你现在可以更深的了解XML和Microsoft 解析器(Msxml.dll)。 |
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:23:00 AM -- 28、对于XML应用开发来说,DOM就是一个对象化的XML数据接口,一个与语言无关、与平台无关的标准接口规范。 它定义了HTML文档和XML文档的逻辑结构,给出了一种访问和处理HTML文档和XML文档的方法。 利用DOM,程序开发人员可以动态地创建文档,遍历文档结构,添加、修改、删除文档内容, 改变文档的显示方式等等。可以这样说,文档代表的是数据,而DOM则代表了如何去处理这些数据。 无论是在浏览器里还是在浏览器外,无论是在服务器上还是在客户端,只要有用到XML的地方,就会碰到对DOM的应用。 作为W3C的标准接口规范,目前,DOM由三部分组成,包括:核心(core)、HTML和XML。 目前,DOM有两个版本,一个是由W3C于1998年8月18日通过的DOM Level 1, Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根, 由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在, Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点, 30、Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是 31、NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节 在DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接 NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。 32、实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。 NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。 使用不同的编程语言创建Document对象的范例。 JScript: VB Script: VB: VC:
34、Document的加载 依旧以联系人列表信息的XML文档.xml为例,可通过下述方式来加载文档: Dim myDocumentSet myDocument = CreateObject("microsoft.xmldom") |
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:23:00 AM -- 35、对DOM树的操作::
首先,我们要获取XML文档的根元素节点,用VBScript语言描述这个操作如下: root = myDocument.documentElement 该语句的实际含义如下图黄色箭头所示。
在得到了文档的根元素节点之后,我们又将如何访问其他元素呢?以文档中的第二个person元素为例, personNode = root.childNodes.item(1) 上述访问语句执行后,theName的值是"李四"。下图黄色箭头给出了这一访问过程的示意:
在上面的代码中,root是文档的根元素节点addressbook节点, childNodes是NodeList类型的属性,item是NodeList接口中Node类型的属性, 在DOM规范中,要访问元素节点的文本内容,需要先得到元素节点的TEXT子节点, 上面的例子给出了如何访问DOM树中的元素节点, attr = node.attributes.getNamedItem("sex") 上述访问语句执行后,attrContent的值是"male"。下图用黄色箭头标出了这一访问的过程。
在上面的代码中,attr是属性类型的节点,attributes是NamedNodeMap类型的属性,
36、实现添加元素操作的语句如下: node = root.childNodes.item(0) //确定位置 其中,oldNode中存放的是已被删除的节点。在删除某个节点时, 假如想把张三的电子邮件地址更改为zhs@pku.edu.cn,通过下列语句就可以实现: node = root.childNodes.item(0) //查找节点 SAX是一种事件驱动的接口,它的基本原理是由接口的用户提供符合定义的处理器, SAXParserFactory Parser DocumentHandler ErrorHandler DTDHandler EntityResolver 一个典型的SAX应用程序至少要提供一个DocumentHandler接口。一个健壮的SAX应用程序还应该提供ErrorHandler接口。
|
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:25:00 AM -- 41、在关系数据库中,数据仅仅是数据,它不包含层次结构信息; 而面向对象数据库可以将数据视为对象,数据是作为一个整体,包含了属性和方法,并能体现数据间的继承关系。 1>能够根据文档类型定义(DTD或Schema)确定数据库的模式。 ASP: <% @language = "VBScript" %> ’查询数据库 while (not rsData.EOF ) Response.Write(xmlDoc.xml) <% Response.ContentType="text/xml" %> <% Set cConn = Server.CreateObject("ADODB.Connection") </联系人列表> <?xml version = "1.0" encoding="GB2312" standalone = "no"?> <联系人列表> <联系人>
|
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:25:00 AM -- 44、这种方案存在一个前提,那就是,开发者必须了解文档结构,并且通过编程严格控制输出文档的格式。 但细心的读者可能会产生疑问:既然数据已经存储在数据库中,又何必大费周折重新定义一遍文档结构呢? XML的自描述性何在?为了解决这个问题,微软将其ADO技术进行了扩展以提供对XML的更大支持, 结果是可以根据数据库表的内在结构直接输出XML文档,文档的格式将符合默认的DTD定义。下面是一个用Visual Basic 6.0编写的实例: ’声明连接和结果集 ’执行数据库查询 ’将数据库返回结果集保存至文件 下面给出的是该程序执行后生成的XML文档--output.xml。通过分析,可以发现, <xml xmlns:s=’uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882’ <s:AttributeType name=’Name’ rs:number=’1’ rs:nullable=’true’ rs:write=’true’> <s:AttributeType name=’ID’ rs:number=’2’ rs:nullable=’true’ rs:write=’true’> <s:AttributeType name=’Company’ rs:number=’3’ rs:nullable=’true’ rs:write=’true’> <s:AttributeType name=’Email’ rs:number=’4’ rs:nullable=’true’ rs:write=’true’> <rs:data> ADO提供了文档保存功能,通过它,ASP可以将数据库返回结果集保存至XML文件, <%
常用的XPath表达式 记号 含义 a 上下文节点的a元素
XML 模式命令 XML-DR命令 element ElementType name 元素名称 content 描述可能包含在元素里的内容: empty,textOnly(只对PCDATA), dt:type 表示元素类型。这个属性与XML 模式里的<datatype>元素一致。 order 子元素的基本顺序: one(从一系列元素选出的一个)、seq(特定的元素 type 与在模式里定义的<ElementType>的name属性值相一致 minOccurs 引用元素类型在元素里能出现的最小次数,当出现次数为0,即元素是可 maxOccurs 引用元素类型在元素里能出现的最大次数,当出现次数最多为1次时,此 <attribute>元素也能有三个属性(参见表7 - 8)。 表7 - 8 <attribute>属性 描述 default 属性的缺省值,不考虑它所重载的<Attribute>元素里提供的任何缺省值 maxOccursgroup 可能出现的最大次数。可取值0或*(很多)
|
-- 作者:卷积内核 -- 发布时间:3/15/2006 10:28:00 AM -- 由于前段时间是边学边发,所以凌乱了一些,应广大兄弟姐妹建议今天整理一下,希望能多多交流,让我们论坛更强大。 |
-- 作者:minmin0876 -- 发布时间:4/9/2007 8:00:00 PM -- 替你顶起来 哈哈 好东西哦 |
-- 作者:klzhuang -- 发布时间:11/29/2007 10:44:00 AM -- ding~~~ 还是刚刚接触这个东西!迷茫ing |
-- 作者:mike_fang -- 发布时间:5/26/2008 5:14:00 PM -- 初学,了解 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
5,718.750ms |