欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    建立格式正确的ML文件.docx

    • 资源ID:3505664       资源大小:44.37KB        全文页数:16页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    建立格式正确的ML文件.docx

    建立格式正确的ML文件建立格式正确的XML文件 在本章中,你将学习建立格式正确的XML 文件的基本技术。格式正确的文件指的是一份符合最小标准集合的文件。该标准遵守了XML 文件的规格。当你建立格式正确的XML 文件时,你可以向右延伸并开始在需要元素时加入元素,并输入文件的数据,就像你在建立HTML 网页时所做的一样。然后,你在使用Microsoft Internet Explorer 5 处理与显示任何格式正确的文件时将不会有任何问题。 在第五章中,你将学习如何建立一份有效的XML 文件:它不只是一个格式正确的文件,同时需符合一组更严格的限制。建立一个有效的XML 文件并不像建立格式正确的文件那样简单。在你开始为有效的文件加入元素与数据之前,你必须在文件型态宣告部份中完整定义文件的结构,而该文件型态宣告会被加入文件序文中。在第五章中,你将会学到一些制作有效文件的优点,特别是当你或其它人正在建构一组类似的文件时。 在本章中,首先你将学习所有格式正确的XML 文件的必要性与选择性部份。接下来你将探索如何借着定义文件的元素来将信息加到XML 文件之中。然后你将学习为元素加入属性以提供额外的文件信息。 格式正确的XML 文件的各个部份 如同你在第二章所学到的,XML 文件由两个部份组成:序文与文件元素。另外,紧邻文件元素之后,XML 文件还包括了批注、处理指令,以及空白部份。下面是一个格式正确的XML 文件范例,它显示了文件的各个部份以及在每个部份中你可以加入的项目: 列表31 示范了这个范例文件的完整版本。 Parts.xml <?xml version='1.0' standalone='yes' ?> <!-File Name:Parts.xml > <?xml-stylesheet type="text/css" href="Inventory01.css"?> <INVENTORY> <BOOK> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK> <TITLE>Leaves of Grass</TITLE> <AUTHOR>Walt Whitman</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> <BOOK> <TITLE>The Legend of Sleepy Hollow</TITLE> <AUTHOR>Washington Irving</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>98</PAGES> <PRICE>$2.95</PRICE> </BOOK> <BOOK> <TITLE>The Marble Faun</TITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>473</PAGES> <PRICE>$10.95</PRICE> </BOOK> <BOOK> <TITLE>MobyDick</TITLE> <AUTHOR>Herman Melville</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>724</PAGES> <PRICE>$9.95</PRICE> </BOOK> <BOOK> <TITLE>The Portrait of a Lady</TITLE> <AUTHOR>Henry James</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>256</PAGES> <PRICE>$4.95</PRICE> </BOOK> <BOOK> <TITLE>The Scarlet Letter</TITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>253</PAGES> <PRICE>$4.25</PRICE> </BOOK> <BOOK> <TITLE>The Turn of the Screw</TITLE> <AUTHOR>Henry James</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>384</PAGES> <PRICE>$3.35</PRICE> </BOOK> </INVENTORY> <!-Comments,processinginstructions,and white space can also appear after the document element.-> <?MyApp Parm1="value 1" Parm2="value 2"?> 在文件序文起始部份的XML 宣告版本号码可以用单引号'或双引号"来包围指定。通常,XML 卷标中引号内的字符串称为literal可以使用单引号或双引号来包围。因此,下面的程序都是合法的: <?xml version='1.0'?> <?xml version="1.0"?> 在列表31 范例文件中的XML 宣告也包含了一个独立文件宣告。这个宣告可以用在某些XML 文件中来简化文件的处理。 在这个范例文件的序文与文件元素的部份都包括了批注。 文件的序文包含了两行空白,标签为空白部份,而文件元素之后也包括了两行空白。空白部份由一个或多个的空格符、Tab、换行,或底线字符所组成。为了让XML 文件具有更高的可读性,你可以自由地在XML 卷标之间例如起始卷标、结束卷标、批注,与处理指令加入空白部份,也可以在标签之中加入空白例如,范例文件中XML 宣告的结尾部份中的yes与?之间的空格符。除非空格符是包含在直接包含字符数据的元素之中,否则处理器会简单地将之忽略。 范例文件在序文中有一个处理指令,并在紧邻文件元素处也有一个处理指令。 最后,文件包含了XML 文件的必要条件:文件元素。建立文件元素与其包含的巢状元素是本章的讨论重点。 注意 如同你将在第五章中学到的,有效的XML 文件需要包含一个附加的组件,这个组件并未包括在列表31 的范例中:这个组件就是文件型态宣告,可以放置在序文中的任何位置,其它卷标之外,跟在XML 宣告之后。文件型态宣告定义了完整XML 文件的结构。 XML 文件的最低要求 列表31 的XML 文件范例的序文部份包含了所有可以放置在序文中的项目。然而,请注意,这些项目都是选择性的,可有可无。因此,序文本身也是选择性的,而后基本要求的XML 文件,只包含了一个简单的文件元素,符合格式正确的XML 文件标准: <minimal>A minimalist document.</minimal> 该文件在Internet Explorer 5 中将显示如下: 加入元素到文件中 XML 文件中的元素包含了真正的文件信息,而且指出了这些信息的逻辑结构。 元素会以树状结构的方式被安排,元素可以巢状套迭在其它的元素之中。文件必须明确地拥有一个顶层元素文件元素或根元素而其它的元素都套迭在这个元素之下。因此,下面是一个格式正确的XML 文件。 <?xml version="1.0" ?> <!-A well-formed XML document.-> <INVENTORY> <BOOK> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK> <TITLE>Leaves of Grass</TITLE> <AUTHOR>Walt Whitman</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> </INVENTORY> 然而,下面的文件则不是格式正确的: <?xml version="1.0"?> <!-This document is NOT well-formed.-> <BOOK> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK> <TITLE>Leaves of Grass</TITLE> <AUTHOR>Walt Whitman</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> 元素必须适当地套迭。这代表,如果元素是在另一个元素之中开始,它必须也在相同的元素之中结束。例如,这些元素都是格式正确的: <BOOK> <TITLE>Leaves of Grass</TITLE> <AUTHOR>Walt Whitman</AUTHOR> </BOOK> 然而,这些元素就不是格式正确的: <!-NOT well-formed:-> <BOOK><TITLE>Leaves of Grass</BOOK></TITLE> 注意 一个包含一个或多个套迭元素的元素称为父元素。而一个直接包含在父元素之下的元素则称为子元素、副元素,或父元素的套迭元素。 元素解析 如你所见,元素通常由起始卷标、内容与结束卷标所组成。 不像HTML,XML 要求你一定要包含起始卷标与结束卷标。 出现在起始卷标与结束卷标开头部份的名称,称为元素的型态或通用识别代号。型态名称可以用来识别特殊的元素型态或元素类别,而不是特定一个元素。因此,元素可以包含多个拥有相同型态名称的元素。 当你为XML 文件加入元素时,你可以选择任何你想要的型态名称,只要遵守下面的规则即可: 名字必须以字母或底线开头,后面接着零或多个字母、数字、句号、连字号,或底线。 XML 规格书中说明了元素的型态名称是以xml为前缀,而且将被保留成为标准规格。虽然Internet Explorer 5 并不强迫要求遵守这项限制,但最好不要使用这个前缀以避免将来产生问题。 下列是合法的元素型态名称: Part _1stPlace A BSECTION Street.Address.1 下列则是不合法的元素型态名称: 1stPlace <!Digit not allowed as first character > B Section <!Space not allowed within a name > B/Section <!Slash not allowed within a name > :Chapter <!Colon not allowed as first character in IE5 > A:Section <!In IE5,allowed only if you 've declared A as a namespace > 注意 根据XML 规格书中的定义,元素名称中的冒号将被保留作为命名空间用。命名空间负责区别拥有相同名称的元素,笔者将在第七章的 将HTML 元素加到XML 文件中并使用命名空间 中继续讨论。只有当元素名称接在已经宣告过的命名空间之后,InternetExplorer 5 才会让你在元素名称中加入冒号。例如,A:Section 只有在你已将A 宣告成命名空间时才为合法。 同时,起始标签中的名字必须完全与结束标签中的名字相同,包括字母的大小写。因此,底下的元素就不是格式正确的: <Title>Chapter One</title><!NOT wellformed.> 元素名字中的大小写相当重要,如同所有卷标中的文字规定一样,有大小写之分。因此,元素型态名称Ace 与ace 或ACE 并不相同。 元素内容的类型 元素内容指的是起始卷标与结束卷标之间的文字。你可以在文件的内容包括下列型态的项目: 套迭的元素 。在列表31,元素INVENTORY 与BOOK 都包含了套迭元素当作元素的内容: 字符数据 。字符数据是表达元素内容信息的文字,例如TITLE 元素中特定的书籍标题。 下面介绍的是一个由字符数据与套迭的元素所组成的元素内容: 当加入字符数据到元素中时,你可以加入除了左括号,与连接符号或字符串之外的字符。 注意 XML 解析器会扫瞄XML 卷标中元素的字符数据。你不可以加入左角括号、连接符号,或字符串当作字符数据的一部份,因为解析器会将当作套迭元素的起始,将当作实体或字符参照的起始,以及将当作CDATA 区段的结束。如果你想要加入或来当作字符数据的一部份,你可以使用CDATA 区段。你也可以使用字符参照来加入任何字符,而且可以借着使用预先定义的普通实体参照来加入某些字符。 普通的实体参照与字符参照 。下面是一个包含普通实体参照与字符参照的元素范例: CDATA 区段 。CDATA 区段是一个你可以自由加入除了 >字符串之外任何字符的文字区块。下面是一个元素中CDATA 区段的范例: 处理指令 。处理指令提供信息给XML 应用程序使用。 批注 。批注是XML 文件的注释部分,其文字是可以阅读了解的,但XML 处理器会将之忽略。 下面是一个包含处理指令与批注的元素范例: 空元素 你也可以加入空元素到你的文件中。你可以借着在起始卷标后立即放置结束卷标来建立一个空元素,如同这个范例所示: <HR></HR> 或者,你可以借着使用特殊的空元素卷标来省去输入,如下所示: <HR/> 这两个标签拥有相同的意义。 因为空元素没有内容,你可能会质疑其用途为何。 下面介绍的是两种可能的用途: 你可以使用空元素告诉XML 应用程序来执行某个动作或显示对象。在HTML 中的例子BR 是空元素,它能告诉浏览器加入一个换行,而HR 空元素,则是告诉浏览器加入一个水平分界线。换言之,仅拥有元素外观与特定名称的元素未含任何内容还是可以提供许多重要的信息给应用程序。 空元素可以透过属性来储存信息,你将在本章后面学到属性的知识。在HTML 中的例子是IMG空元素,它包含了告诉处理器那里可以找到图形文件,以及如何显示图形等信息的属性。 提示 如同你将在第七章学到的,串接样式表可以使用空元素来显示影像。在第八章,你将学习如何运用数据链路来使用空元素或非空元素的属性。而在第九章与第十章中,你将学习如何使用HTML script与XSL 样式表来使用元素及元素的相关属性并执行适当的动作。 建立不同型态的元素 1. 在文字编辑器中 开启 一个新的、空白文字文件,并输入显示于列表32 中的XML文件。你也可以使用你在第二章中所建立的 Inventory.xml 文件来当作出发点。 2. 使用文字编辑器的 存盘 指令,将文件储存到本机硬盘,并指定文件名为 Inventory03.xml 。 Inventory03.xml <?xml version="1.0"?> <!-File Name:Inventory03.xml -> <?xml-stylesheet type="text/css" href="Inventory02.css"?> <INVENTORY><!-Inventory of selected 19th Century American Literature -> <BOOK> <COVER_IMAGE Source="Huck.gif"/> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK> <COVER_IMAGE Source="Leaves.gif" /> <TITLE>Leaves of Grass</TITLE> <AUTHOR>Walt Whitman</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> <BOOK> <COVER_IMAGE Source="Faun.gif" /> <TITLE>The Marble Faun</TITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>473</PAGES> <PRICE>$10.95</PRICE> </BOOK> <BOOK> <COVER_IMAGE Source="Moby.gif" /> <TITLE> MobyDick <SUBTITLE>Or,the Whale</SUBTITLE> </TITLE> <AUTHOR>Herman Melville</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>724</PAGES> <PRICE>$9.95</PRICE> </BOOK> </INVENTORY> 注意 你所输入的文件使用了一个名为 Inventory02.css 的CSS,这是你在之前的练习中所建立的。确定这个样式表档案是放在与 Inventory03.xml 相同的目录中。 3. 在Windows 档案总管或目录窗口中,利用鼠标双击你刚储存的 Inventory03.xml 档案: Internet Explorer 5 的显示如下图所示: 你输入的文件包含了下列型态的元素与元素内容: 元素中包含批注作为内容的一部份。注意浏览器并不会将批注显示出来。 在每一个BOOK元素的开头部份有一个名为 COVER_IMAGE 的空元素。这个元素的目的是告诉XML 应用程序显示书籍封面上的特定影像。然而,在这个范例中要能使用这样的一个空元素,你需要透过HTML 网页中的script 或XSL 样式表来显示XML 文件,而不是使用简单的CSS。 一个包含字符数据与子元素的元素。注意浏览器会将字符数据与子元素显示在同一行上,并使用相同的格式。 为元素加入属性 在元素的起始卷标中,或是在空白标签中,你可以含括一个或多个属性规格。属性规格是一个与元素结合的名称数值对。例如,下面的PRICE 元素包含了一个名为Type 的属性,其值被指定为retail: <PRICE Type="retail">$10.95</PRICE> 对其他的书籍而言,这项属性可能设定成其它值,例如设定成wholesale。 下面的BOOK 元素包含了两个属性,Category 与Display: <BOOK Category="fiction" Display="emphasize"> <TITLE>The Marble Faun</TITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>473</PAGES> <PRICE>$10.95</PRICE> </BOOK> 下面的空元素则包含了名为Source 的属性,指出包含要被显示影像的文件名称: <COVER_IMAGE Source="Faun.gif" /> 加入属性提供了另一种方法来为元素加入信息。一般来说,你可以放置大量你想要显示的元素数据于元素的内容中。而且,你可以使用属性来储存元素不同的特性,并不必然是那些要显示的资料。如同目录,或者是显示指令。然而,在XML 的规格书中,对于应该被储存在属性或内容的信息型态作了严格的区别。 注意 当你使用CSS 来显示XML 文件,浏览器并不会显示属性或属性值。然而使用数据链路、HTML 网页中的script,或XSL 样式表来显示XML 文件,可让你存取属性与属性值,或者执行适当的动作。 建立属性的规则 如同你所看到的,属性规格是由属性名称后面接着等号,再接着属性值所构成的。你可以选择你想要的任何名称,只要遵循下面规则即可: 名称必须由字母或底线所组成,后面接着零或多个字母、数字、句点、连字号,或底线。 XML 规格书中陈述了属性的名称以xml作为起始,该前缀被保留作为标准规格。虽然Internet Explorer 5 并未执行这项限制,但最好还是不要使用该前缀以避免将来的冲突。 特定的属性名称只能出现在起始卷标或空白卷标中一次。 例如,下面起始卷标中的属性名称是合法的: <ANIMATION FileName="Waldo.ani"> <LIST _1stPlace="Sam"> <ENTRY Zip.Code="94941"> 下面的属性名称则是违法的: <!Duplicated attribute name in same tag:> <ANIMATION FileName="Waldo1.ani" FileName="Waldo2.ani"> <LIST 1stPlace="Sam"><!Digit not allowed as first character > <ITEM A:Category="cookware"><!In IE5,allowed only if you 've declared A as a namespace > 注意 根据XML 规格,在属性的名称中冒号的使用被保留供指定命名空间用。命名空间被用来区分拥有相同名字的属性;命名空间将在第七章中的 将HTML 元素加到XML 文件中并使用命名空间 作讨论。只有当元素名称接在已经于文件中宣告过的命名空间之后,Internet Explorer 5 才会让你在元素名称中加入冒号。例如,只有当你已经将A 宣告成命名空间时,A:Category 才是合法的。 合法属性值的规则 你指定到属性的值是包含在引号内的一连串字符,称为引号字符串,或literal。你可以指定任何的literal 值到属性中,只要遵守下面的规则即可: 字符串可以使用单引号或双引号来包围。 字符串中不能包含用来包围字符串的引号。 字符串可以包含字符参照或普通内部实体参照。 字符串不能包含字符。 字符串不能包含字符,除了作为字符参照或实体参照的起始外。 你已经看过合法属性规格的范例。下面的属性规格则是违法的: <EMPLOYEE Status=""downsized""><!-Can 't use delimiting quotewithin string.-> <ALBUM Type="<CD>"><!-Can 't use <within string.-> <WEATHER Forecast="Cold &Windy"><!-Can 't use &except tostart a reference.-> 如果你想要在属性值中包含双引号,你可以使用单引号来包围界定字符串,如下面范例所示: <EMPLOYEE Status='"downsized"'><!-Legal attribute value.-> 同样地,要将单引号包含在字符串中,就使用双引号来将字符串包围: <CANDIDATE name="W.T.'Bill ' Bagley""><!-Legal attribute value.-> 提示 你可以借着使用字符参照来避开这种字符限制并输入任何字符到属性中,或是使用如果可以的话预先定义的普通实体参照。笔者将在第六章中解释字符参照与预先定义的普通实体参照。 如果你建立一个不包含文件型态宣告的格式正确的文件,你可以赋予属性符合上述规则的任何值。然而,如同你将在第五章中学到的,当你建立文件型态宣告并将属性定义于该宣告内,你可以限制那些可以被指定到属性的值的型态。例如,你可以将属性定义成其值只能接受yes或no。因此,将某些型态的信息储存到元素的属性中而非内容中的好处,就是你可以获得更多可以被指定到属性上的数据型态上的控制权,并让解析器实行这些型态的限制。 将内容转换成属性 1. 在文字编辑器中 开启 一份新的、空白的文本文件,并输入列表33 中显示的XML文件。你也可以使用你之前输入过的 Inventory.xml 文件作为起始点。 2. 使用文字编辑器的 另存新文件 指令将文件储存于本机硬盘上,文件名为 Inventory04.xml 。 Inventory04.xml <?xml version="1.0"?> <!-File Name:Inventory04.xml -> <?xmlstylesheet type="text/css" href="Inventory02.css"?> <INVENTORY> <BOOK Binding="mass market paperback"> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR Born="1835">Mark Twain</AUTHOR> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK Binding="hardcover"> <TITLE>Leaves of Grass</TITLE> <AUTHOR Born="1819">Walt Whitman</AUTHOR> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> <BOOK Binding="trade paperback"> <TITLE>The Marble Faun</TITLE> <AUTHOR Born="1804">Nathaniel Hawthorne</AUTHOR> <PAGES>473</PAGES> <PRICE>$10.95</PRICE> </BOOK> <BOOK Binding="hardcover"> <TITLE>MobyDick</TITLE> <AUTHOR Born="1819">Herman Melville</AUTHOR> <PAGES>724</PAGES> <PRICE>$9.95</PRICE> </BOOK> </INVENTORY> 注意 你输入的文件使用了你在前面练习中所建立、名为的 Inventory02.css 的CSS。请确定这个样式表档案是与Inventory04.xml 位在相同的目录中。 3. 在Windows 档案总管或目录窗口中,双击你刚储存的 Inventory04.xml 档案:Internet Explorer 5 的显示如下图所示: 你输入的文件是以 Inventory.xml 为基础,该档案是你在之前的练习中建立的。除了拥有比 Inventory.xml 较少的元素外,新文件拥有两项修正,藉以说明属性的使用: 在每一个BOOK 元素中,书籍的连结信息都从内容被转换成名为Binding 的属性。例如,你可能会制作这种转换,因为你想储存连结的型态,但是当使用CSS 来显示该文件时,你却不想将之与其它的书籍信息显示出来。 一个名为Born 的属性被加到每一个AUTHOR 元素中,以储存作者的出生日期。这是一个你可能想要储存,但却不想显示的较不重要信息的范例。将这类信息隐藏并指出该信息是较不重要的的方法之一,就是将它指定到属性中,而不是放在元素的内容中。 这些只是属性众多用途的极少部分。你将在第五章中看到更多的用法。

    注意事项

    本文(建立格式正确的ML文件.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开