怎么使用XML Schema定义元素

这篇文章主要介绍怎么使用XML Schema定义元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

XML Schema 比 DTD 更强大。为了说明 XML Schema 机制的强大功能,下面三个程序清单简要比较了表示元素的不同方式。 清单 1给出了一个 XML 文档段, 清单 2用 DTD 语法声明了这两个元素, 清单 3则是相应的 XML Schema 语法形式。要注意, 清单 3中所用的是相同的 XML 语法。通过模式,验证解析器可以检查元素 InvoiceNo 是否是正整数,元素 ProductID 的首字符是否为 A 到 Z 之间的字母,后面为六个阿拉伯数字。相反,引用 DTD 的验证解析器只能检查这些元素是否用字符串表示。

清单 1:XML 文档段

123456789
J123456

清单 2:描述清单 1 中元素的 DTD 段


清单 3:描述清单 1 中元素的 XML Schema





在 XML Schema 中使用名称空间

在这个协作的世界中,一个人可能处理来自多个其他团体的文档,而不同的团体可能希望以不同的方式表示他们的数据元素。此外,他们还可能在一个文档中引用不同团体创建的同名元素。如何区分相同名字的不同定义呢?XML Schema 使用名称空间区分这些定义。

附:

DTD 的局限性

(尽管作为描述结构化信息的一种机制,DTD 成功地为 SGML 和 HTML 开发人员服务了 20 年,但与 XML Schema 相比,它存在着严重的局限性。

DTD 要求元素由以下三种成分组成:

文本字符串

文本字符串与其他子元素的混合

一组子元素

DTD 不使用 XML 语法,对类型和名称空间仅提供有限的支持。)

一个给定的 XML Schema 定义了一组新名字,如元素名、类型名、属性名、属性组名,这些名字的定义和声明都写在模式中。 清单 3定义的名字包括 InvoiceNo 、 ProductID 和 ProductCode 。

我们说模式中定义的名字属于它的 目标名称空间。名称空间本身有一个固定但没有限制的名字,必须符合 URL 语法。比如,对于 清单 3中模式段,您可以把名称空间的名字设为: http://www.SampleStore.com/Account 。

名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL http://www.SampleStore.com/Account 根本没有指向任何文件,只是一个分配的名字。

模式中的定义和声明可能引用属于其他名称空间的名字。在本文中,我们称这些名称空间为 源名称空间。每个模式都有一个目标名称空间,但可能有多个源名称空间。名称空间的名字可能相当长,但在 XML 文档中通过 xmlns 声明可使用简写形式。为了说明这些概念,我们可以向前述 清单 4中的示例模式中添加更多的内容。

清单 4:目标名称空间和源名称空间








在 清单 4的 XML Schema 中, targetNamespace 的名字是www.SampleStore.com/Account ,其中包含的名字有 InvoiceNo 、 ProductID 和 ProductCode 。 schema 、 element 、 simpleType 、 pattern 、 string 和 positive-integer 这些名字属于源名称空间 www.w3.org/1999/XMLSchema ,通过 xmlns 声明缩写为 xsd 。别名 xsd 没有任何特殊的地方,我们可以选择任何其他的名字。在本文后面的部分为了方便和简化起见,我们使用 xsd 代表名称空间 www.w3.org/1999/XMLSchema ,在一些代码段中省略了限定符 xsd 。在这个例子中, targetNamespace 偶尔也作为一个源名称空间,因为要使用名字 ProductCode 定义其他的名字。

清单 4中的模式段不需要指定源模式文件的位置。对于整个“模式的模式”, http://www.w3.org/1999/XMLSchema ,不需要指定位置,因为它的位置是人所共知的。对于源名称空间 www.SampleStore.com/Account ,也不需要指定位置,因为它恰好是该文件中定义的目标名称空间。为了更好地理解如何指定模式的位置和使用默认名称空间,看一看 清单 5中扩展的例子。

清单 5:多个源名称空间,导入一个名称空间









清单 5中多了一个名称空间引用: www.PartnerStore.com/PartsCatalog 。这个名称空间不同于 targetNamespace 和标准名称空间。因此必须使用 import 声明元素引入,该元素的 schemaLocation 属性指明包含模式的文件位置。默认的名称空间是www.w3.org/1999/XMLSchema ,它的 xmlns 声明没有名字。每个非限定的名字如 schema 和 element ,都属于默认名称空间www.w3.org/1999/XMLSchema 。如果模式从一个名称空间中引用了多个名字,将其指定为默认名字空间更方便。

一个 XML 实例文档可能引用多个名称空间的元素名,这些名称空间定义在不同模式中。为了引用和简化名称空间的名字,同样要使用 xmlns 声明。我们使用 XML Schema 实例名称空间的 schemaLocation 属性指定文件的位置。要注意,该属性不同于上一个例子中 xsd 名称空间的同名属性 schemaLocation 。

清单 6:使用来自多个模式的多个名称空间的名字



123456789

图 2:清单 5 和清单 6 的名称空间

定义元素

定义元素就是定义元素的名字和内容模型。在 XML Schema 中,元素的内容模型由其类型定义,因此 XML 文档中实例元素的值必须符合模式中定义的类型。

类型包括简单类型和复杂类型。简单类型的值不能包含元素或属性。复杂类型可以产生在其他元素中嵌套元素的效果,或者为元素增加属性。(到目前为止本文中的例子都是用户定义的简单类型,比如 ProductCode )。XML Schema 规范也包括预定义的简单类型(请参阅侧栏 简单类型)。 派生的简单类型约束了基类型的值。比如,派生简单类型 ProductCode 的值是基类型 string 值的子集。

简单的、非嵌套的元素是简单类型

不含属性或其他元素的元素可以定义为简单类型,无论是预定义的简单类型还是用户定义的简单类型,如 string 、 integer 、 decimal 、 time 、 ProductCode 等等。

清单 7:一些元素的简单类型


带有属性的元素必须是复杂类型

现在,试着向 清单 7中的简单元素 price 增加属性 currency 。您不能这样做,因为简单类型的元素不能有属性。如果希望增加属性,您必须把 price 元素定义成复杂类型。在 清单 8的例子中,我们定义了一个 匿名类型,没有明确地命名这个复杂类型。换句话说,没有定义复杂类型 complexType 的 name 属性。

清单 8:一个复杂元素类型






嵌入其他元素的元素必须是复杂类型

在 XML 文档中,一个元素可能嵌入其他的元素。这种要求可以在 DTD 中直接表示。但 XML Schema 定义一个元素,这个元素有一个类型,而这个类型可以包含其他元素和属性的声明。 表 1给出了一个简单的例子。

表 1:DTD 和 XML Schema 中复杂数据类型的比较

XML 文档


CoolXML<Title>
<Author>CoolGuy</Author>
</Book></pre><p>DTD</p><pre><Book>
<Title>CoolXML<Title>
<Author>CoolGuy</Author>
</Book></pre><p>XML Schema</p><pre><Book>
<Title>CoolXML<Title>
<Author>CoolGuy</Author>
</Book>


<!ELEMENTBook(Title,Author)>
<!ELEMENTTitle(#PCDATA)>
<!ELEMENTAuthor(#PCDATA)>

<elementname='Book'type='BookType'/>
<complexTypename='BookType'>
<elementname='Title'type='string'/>
<elementname='Author'type='string'/>
</complexType></pre><p>尽管 表 1中的 XML 代码同时满足 DTD 与 XML Schema 段,但两者之间有一个很大的区别。在 DTD 中所有的元素都是全局性的,而表中的 XML Schema 允许把 Title 和 Author 定义成局部的——只出现在元素 Book 中。为了在 XML Schema 中实现与 DTD 声明完全相同的效果,元素 Title 和 Author 必须是全局范围的,如 清单 9中所示。元素 element 的 ref 属性使您能够引用前面声明的元素。</p><p>清单 9:用全局简单类型定义的复杂类型</p><pre><elementname='Title'type='string'/>
<elementname='Author'type='string'/>
<elementname='Book'type='BookType'/>
<complexTypename='BookType'>
<elementref='Title'/>
<elementref='Author'/>
</complexType></pre><p>在 表 1和 清单 9所示的例子中, BookType 是全局性的,可用于声明其他元素。相反, 清单 10将该类型局部地定义到元素 Book 中,而且定义成匿名元素。要注意, 表 1中的 XML 文档段与表 1、 清单 9和 清单 10中三个模式段都匹配。</p><p>清单 10:隐藏 BookType 作为本地类型</p><pre><elementname='Title'type='string'/>
<elementname='Author'type='string'/>
<elementname='Book'>
<complexType>
<elementref='Title'/>
<elementref='Author'/>
</complexType>
</element></pre><p>表示元素的复杂约束</p><p>对于表示元素内容模型的约束,XML Schema 比 DTD 提供了更大的灵活性。在最简单的层次上,像在 DTD 中那样,您可以把属性和元素声明关联起来,指明能够出现的给定元素集合序列:只能出现 1 次(1)、出现 0 次或多次(*)或者出现 1 次或多次(+)。您还可以表示 XML Schema 中的其他约束,比方说使用 element 元素的 minOccurs 和 maxOccurs 属性,以及 choice 、 group 和 all 元素。</p><p>清单 11:表示元素类型的约束</p><pre><elementname='Title'type='string'/>
<elementname='Author'type='string'/>
<elementname='Book'>
<complexType>
<elementref='Title'minOccurs='0'/>
<elementref='Author'maxOccurs='2'/>
</complexType>
</element></pre><p>在 清单 11中, Book 中 Title 的出现是可选的(类似 DTD 的 '?')。但是, 清单 11也说明 Book 元素中至少要有一个但不能超过两个作者。 element 的 minOccurs 和 maxOccurs 属性的默认值是 1。元素 choice 只允许它的一个子女出现在实例中。另外一个元素 all ,表示这样的约束:组中的所有子元素可以同时出现一次,或者都不出现,它们可以按任意的顺序出现。 清单 12表示 Title 和 Author 两者必须同时出现(顺序任意)在 Book 中,或者都不出现。这种约束很难在 DTD 中表示。</p><p>清单 12:指出必须为元素定义所有的类型</p><pre><xsd:elementname='Title'type='string'/>
<xsd:elementname='Author'type='string'/>
<xsd:elementname='Book'>
<xsd:complexType>
<xsd:all>
<xsd:elementref='Tile'/>
<xsd:elementref='Author'/>
</xsd:all>
</xsd:complexType>
</xsd:element></pre><p>更上层楼</p><p>我们已经讨论了在 XML Schema 中定义元素所需的最基本的概念,通过一些简单的例子使您领略到它的强大功能。还有一些更强大的机制:</p><p>XML Schema 对类型继承提供了广泛的支持,允许重用以前定义的结构。使用所谓的 facets,您可以派生新的类型,表示其他某个类型值的更小子集,比如通过枚举、范围或模式匹配来定义子集。在本文的例子中, ProductCode 类型就是使用模式面( pattern facet)定义的。子类型也可以向基类型增加更多的元素和属性声明。</p><p>有几种机制控制能否定义子类型,或者能否在具体的文档中替换为子类型。比如,有可能表示 InvoiceType ( Invoice 编号的类型)不允许子类型化,任何人都不能定义新版本的 InvoiceType 。通过规定在特定的上下文中不能用 ProductCode 类型的子类型替换,也能表达这种约束。</p><p>除了子类型外,还可以定义等价的类型,这样,一个类型的值可以用另一个类型代替。</p><p>通过声明抽象的元素或者类型,XML Schema 提供了一种强制替换机制。</p><p>为了方便起见,可以定义并命名属性组和元素组,从而能够在后面引用这些组达到重用的目的。</p><p>XML Schema 提供了三个元素—— appInfo 、 documentation 和 annotation ——为模式作注解,以方便读者( documentation )和应用程序( appInfo )。</p><p>基于子元素的某些属性可以表示惟一性约束。</p><p>可以通过 W3C 站点(请参阅 参考资料)的文档进一步研究 XML Schema,或者访问 dW XML 专区了解更多的内容。目前,XML Schema 规范已经被批准,并成为候选推荐标准(Candidate Recommendation),毫无疑问您将越来越多地用到它。</p><p>以上是“怎么使用XML Schema定义元素”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!</p>	            </div>
            </div>
            <div class="view-allcontent-box">
                <a href="javascript:void(0);" onclick="viewmore()">
                <div class="view-allcontent" >阅读全文</div>
                </a>
            </div>
                        <span class="zhi-con-wz-date">发布于 2021-03-13 15:40:32 </span>
                        <div class="zhi-con-tag"><a href="https://mip.qiaqa.com/tags/xml.html">xml</a></div>
                        <div class="zhi-con-action">
                <div class="zhi-con-action-item">
                                        <div class="icon-button fenBtn"><i class="ri-share-circle-line"></i> 分享
                    <div class="fenxme"><span class="menu-arrow"></span>
                        <ul>
                        <li><a href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://mip.qiaqa.com/idea/4919.html&title=%E6%80%8E%E4%B9%88%E4%BD%BF%E7%94%A8XML+Schema%E5%AE%9A%E4%B9%89%E5%85%83%E7%B4%A0&desc=%E8%BF%99%E7%AF%87%E6%96%87%E7%AB%A0%E4%B8%BB%E8%A6%81%E4%BB%8B%E7%BB%8D%E6%80%8E%E4%B9%88%E4%BD%BF%E7%94%A8XMLSchema%E5%AE%9A%E4%B9%89%E5%85%83%E7%B4%A0%EF%BC%8C%E6%96%87%E4%B8%AD%E4%BB%8B%E7%BB%8D%E7%9A%84%E9%9D%9E%E5%B8%B8%E8%AF%A6%E7%BB%86%EF%BC%8C%E5%85%B7%E6%9C%89%E4%B8%80%E5%AE%9A%E7%9A%84%E5%8F%82%E8%80%83%E4%BB%B7%E5%80%BC%EF%BC%8C%E6%84%9F%E5%85%B4%E8%B6%A3%E7%9A%84%E5%B0%8F%E4%BC%99%E4%BC%B4%E4%BB%AC%E4%B8%80%E5%AE%9A%E8%A6%81%E7%9C%8B%E5%AE%8C%EF%BC%81XMLSchema%E6%AF%94DTD%E6%9B%B4%E5%BC%BA%E5%A4%A7%E3%80%82%E4%B8%BA%E4%BA%86%E8%AF%B4%E6%98%8EXMLSche...&summary=%E8%BF%99%E7%AF%87%E6%96%87%E7%AB%A0%E4%B8%BB%E8%A6%81%E4%BB%8B%E7%BB%8D%E6%80%8E%E4%B9%88%E4%BD%BF%E7%94%A8XMLSchema%E5%AE%9A%E4%B9%89%E5%85%83%E7%B4%A0%EF%BC%8C%E6%96%87%E4%B8%AD%E4%BB%8B%E7%BB%8D%E7%9A%84%E9%9D%9E%E5%B8%B8%E8%AF%A6%E7%BB%86%EF%BC%8C%E5%85%B7%E6%9C%89%E4%B8%80%E5%AE%9A%E7%9A%84%E5%8F%82%E8%80%83%E4%BB%B7%E5%80%BC%EF%BC%8C%E6%84%9F%E5%85%B4%E8%B6%A3%E7%9A%84%E5%B0%8F%E4%BC%99%E4%BC%B4%E4%BB%AC%E4%B8%80%E5%AE%9A%E8%A6%81%E7%9C%8B%E5%AE%8C%EF%BC%81XMLSchema%E6%AF%94DTD%E6%9B%B4%E5%BC%BA%E5%A4%A7%E3%80%82%E4%B8%BA%E4%BA%86%E8%AF%B4%E6%98%8EXMLSche..." target="_blank" title="分享空间"><i class="ri-qq-fill"></i> 分享空间</a></li>
                        <li><a class="weibo-share" href="https://service.weibo.com/share/share.php?url=https://mip.qiaqa.com/idea/4919.html&title=%E6%80%8E%E4%B9%88%E4%BD%BF%E7%94%A8XML+Schema%E5%AE%9A%E4%B9%89%E5%85%83%E7%B4%A0&pic=&appkey=&searchPic=true" target="_blank" title="分享微博"><i class="ri-weibo-fill"></i> 分享微博</a></li>
                        <li><span class="ewm"><img src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/function/api.php?act=poster&url=https://mip.qiaqa.com/idea/4919.html" alt="https://mip.qiaqa.com/idea/4919.html" /></span><span>手机扫一扫</span></li>
                        </ul>
                    </div>
                    </div>
                    <div class="action-hai"><span class="haibao" id="4919"><i class="ri-camera-lens-line"></i> 海报</span></div>                    <div class="action-eyes"><i class="ri-eye-line"></i> 170</div>
                </div>
            </div>
                        <section class="zhi-prevnext"> 
                <a href="https://mip.qiaqa.com/idea/4918.html" title="上一篇:使用PULL解析XML文件时循环过程的案例">上一篇:使用PULL解析XML文件时循环过程的案例</a>                <a href="https://mip.qiaqa.com/idea/4920.html" title="下一篇:如何同时使用xml、schema和xslt">下一篇:如何同时使用xml、schema和xslt</a>            </section>
                                </div>
    </div>
</div>
<div id="catalogBox"><div class="catalogBox_title">目录</div><ul id="catalogul"></ul></div>
<div class="zhi-con-xg">
    <h3>推荐阅读</h3>
    <div class="slide-items">
        <a href="javascript:;" class="slide-btn prev-r"><i class="ri-arrow-right-s-line"></i></a>
        <a href="javascript:;" class="slide-btn prev-l"><i class="ri-arrow-left-s-line"></i></a>
        <div class="swiper-container slide-item">
            <ul class="swiper-wrapper slide-item-body">
                                                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/php/149237.html">
                                                <div class="new-img">
                            <img src="https://oss.qiaqa.com/article/2022/10/11/10608.jpg" alt="「原创」PHP实战-XML详细教程">
                        </div>
                        <div class="new-body">
                            <p class="new-body-title">「原创」PHP实战-XML详细教程</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/php/148597.html">
                                                <div class="new-body">
                            <p class="new-body-title">在PHP中使用SPL库中的对象方法进行XML与数组的转换</p>
                            <p class="new-body-text">虽说现在很多的服务提供商都会提供JSON接口供我们使用,但是,还是有不少的服务依然必须使用XML作为接口格式,这就需...</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/php/147902.html">
                                                <div class="new-body">
                            <p class="new-body-title">深入学习PHP中的JSON相关函数</p>
                            <p class="new-body-text">在我们当年刚刚上班的那个年代,还全是XML的天下,但现在JSON数据格式已经是各种应用传输的事实标准了。最近几年开始学习...</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/php/146606.html">
                                                <div class="new-img">
                            <img src="https://oss.qiaqa.com/article/2022/10/11/4136.jpg" alt="wps打开word文件出现无法打开因为内容有问题的解决办法">
                        </div>
                        <div class="new-body">
                            <p class="new-body-title">wps打开word文件出现无法打开因为内容有问题的解决办法</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/php/129107.html">
                                                <div class="new-body">
                            <p class="new-body-title">php将xml转化对象的实例详解</p>
                            <p class="new-body-text">XML文件$xml="123456";将文件转换成对象$objectxml=simplexml_load_...</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/idea/71465.html">
                                                <div class="new-body">
                            <p class="new-body-title">Android中如何自定义xml属性</p>
                            <p class="new-body-text">Android中如何自定义xml属性这篇“Android中如何自定...</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/idea/68593.html">
                                                <div class="new-body">
                            <p class="new-body-title">.NET中XML序列化和反序列化常用类和属性是什么</p>
                            <p class="new-body-text">.NET中XML序列化和反序列化常用类和属性是什么这篇“.NET中...</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/idea/68590.html">
                                                <div class="new-body">
                            <p class="new-body-title">C#中XML文件内容增删改查的方法</p>
                            <p class="new-body-text">C#中XML文件内容增删改查的方法本篇内容介绍了“C#中XML文件...</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/idea/66901.html">
                                                <div class="new-body">
                            <p class="new-body-title">Python如何实现xml格式转txt格式</p>
                            <p class="new-body-text">Python如何实现xml格式转txt格式本篇内容介绍了“Pyth...</p>
                        </div>
                                            </a>
                </li>
                                <li class="swiper-slide">
                    <a href="https://mip.qiaqa.com/idea/64209.html">
                                                <div class="new-body">
                            <p class="new-body-title">AJAX怎么使用XML文件进行交互式通信</p>
                            <p class="new-body-text">AJAX怎么使用XML文件进行交互式通信本文小编为大家详细介绍“A...</p>
                        </div>
                                            </a>
                </li>
                                            </ul>
        </div>
    </div>
</div>
                            </div>
        </div>
    </div>
    
<div class="zhi-user-modal">
    <div class="zhi-user-modal-container">
        <ul class="zhi-switcher">
            <li><a href="javascript:void(0);">用户登录</a></li>
            <li><a href="javascript:void(0);">注册新用户</a></li>
        </ul>
        <div id="zhi-login">
            <form method="post" action="#" class="zhi-form">
                <p class="fieldset">
                    <label class="image-replace zhi-username" for="edtUserName">用户名</label>
                    <input type="text" class="full-width has-padding has-border" placeholder="用户名" id="edtUserName" name="edtUserName" size="20" value="" tabindex="1" />
                </p>
                <p class="fieldset">
                    <label class="image-replace zhi-password" for="edtPassWord">密码</label>
                    <input type="password" class="full-width has-padding has-border" placeholder="密码" id="edtPassWord" name="edtPassWord" size="20" tabindex="2" />
                </p>
                <p class="fieldset">
                    <input type="checkbox" name="chkRemember" id="chkRemember"  tabindex="98" />
                    <label for="chkRemember">记住登录状态</label>
                    <a class="fieldsetrig" href="https://mip.qiaqa.com/?user=repass">忘记密码?</a>
                </p>
                <p class="fieldset">
                    <input id="btnPost" name="btnPost" type="submit" value="登录" class="full-width" tabindex="99"/>
                    <input type="hidden" name="username" id="username" value="" />
                    <input type="hidden" name="password" id="password" value="" />
                    <input type="hidden" name="savedate" id="savedate" value="1" />
                </p>
            </form>
                    </div>
        <div id="zhi-singup">
            <form method="post" action="#" class="zhi-form" id="formsing">
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-username">用户名</label>
                    <input class="full-width has-padding has-border" id="zhanghao" name="zhanghao" type="text" placeholder="输入用户名">
                </p>
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-email">邮箱</label>
                    <input class="full-width has-padding has-border" id="email" name="email" type="text" placeholder="输入mail">
                </p>
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-password">密码</label>
                    <input class="full-width has-padding has-border" id="zpassword" name="zpassword" type="password" placeholder="输入密码">
                </p>
                <p class="zhi-singup-set">
                    <label class="image-replace zhi-password">确认密码</label>
                    <input class="full-width has-padding has-border" id="repassword" name="repassword" type="password" placeholder="确认密码">
                </p>
                <p class="zhi-singup-set">
                    <input name="code" type="text" maxlength="6" class="form-control" placeholder="图形验证码" autocomplete="off" required="">
                    <span class="fieldset-code" style="width:96px;">
                        <img src="https://mip.qiaqa.com/zb_system/script/c_validcode.php?id=singin" id="singin" onclick="javascript:this.src='https://mip.qiaqa.com/zb_system/script/c_validcode.php?id=singin&tm='+Math.random();" alt="图形验证码"/>
                    </span>
                </p>
                <p class="zhi-singup-set">
                    <input type="checkbox" name="xieyi" id="xieyi" tabindex="98" />
                    <label for="xieyi">我已阅读并同意 <a href="">用户协议</a></label>
                </p>
                <p class="zhi-singup-set">
                    <input id="btnSin" class="full-width" type="submit" value="注册新用户">
                </p>
            </form>
        </div>
        <a href="javascript:void(0);" class="zhi-close-form"></a>
    </div>
</div>
<div class="zhiback" id="zhiback">
    <div class="askBox">
        <div class="ask-group">
            <form action="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/function/cmd.php?act=ask" method="POST" id="formask">
                <div class="ask-item">
                    <div class="ask-item-img">
                        <img src="https://mip.qiaqa.com/zb_users/avatar/0.png?1745495364" alt="" />
                    </div>
                    <input type="text" id="asktitle" name="asktitle" placeholder="请输入问题标题">
                </div>
                <div class="ask-item">
                    <textarea name="askcon" id="askcon"> 请输入问题背景及详细信息... </textarea>
                </div>
                <div class="ask-footer">
                    <div class="ask-item-as">
                        <input type="hidden" name="csrfToken" value="b72c662af1c4c72f201c00272e0dc834">
                        <input type="submit" class="ask-item-btn" value="发布" />
                    </div>
                </div>
            </form>
        </div>
        <button aria-label="关闭" type="button" class="ask-close"><i class="ri-close-line"></i></button>
    </div>
</div>
<div id="backbox" class="backbox">
    <div class="back genight"><i class="ri-sun-fill"></i></div>
    <div class="back" id="totop"><i class="ri-arrow-up-s-line"></i></div>
</div>
<div class="zhi-menu-m">
    <button type="button" class="btn-close" aria-label="Close"><i class="ri-close-line"></i></button>
    <div class="logo">
        <a href="https://mip.qiaqa.com/"><img src="https://mip.qiaqa.com/logo.png" alt="恰卡编程网"/></a>
    </div>
    <div class="zhi-menu-search">
        <form name="search" method="post" action="https://mip.qiaqa.com/zb_system/cmd.php?act=search">
            <input name="q" size="11" class="zhi-menu-search-input" type="text" placeholder="请输入关键词" autocomplete="off">
            <button class="zhi-menu-search-submit" type="submit"><i class="ri-search-2-line"></i></button>
        </form>
    </div>
    <nav id="mnav"></nav>
</div>
<footer class="zhi-footer">
    <div class="inner">
                <div class="footer-center-info">
                恰卡编程网--程序员编程资料和编程经验分享平台,从入门到进阶,非常详细。学习Java级其他网络编程语言的人很多,借助本站教程,相信你能很快精通并出类拔萃。                </div>
                <div class="zhi-footer-bottom">
            <p>Copyright © 2018-2022 恰卡网 qiaqa.com 版权所有                <a rel="nofollow" class="ico-ico" href="http://www.beian.gov.cn/portal/recordQuery?token=9c5a0517-c8ae-4a6b-b2c7-0dbf41cd45f0" target="_blank">苏ICP备18042295号</a>
                </p>
        </div>
    </div>
</footer>
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?a88faa5532b1e037da0ed2f1324c3674";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
<script src="https://mip.qiaqa.com/zb_system/script/jquery-2.2.4.min.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/swiper.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/copy.js"></script>
<script src="https://mip.qiaqa.com/zb_users/plugin/UEditor/third-party/prism/prism.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/html2canvas.min.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/lightbox.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/jquery.form.js"></script>
<script src="https://mip.qiaqa.com/zb_users/theme/ZhiMedia/script/zhimedia.js?v=1.3.6"></script>    </body>
</html><!-- 缓存生成时间: 2025-04-24 19:49:22 by ZBlogCache 0.03 ms , 0 query , 2053kb memory , 0 error -->