XML语法大全

XML语法大全

2023年7月28日发(作者:)

译 者 序

XML让Web应用程序焕然一新!

在开发者逐步趋向使用浏览器作为Web应用程序的通用客户端之后,浏览器所承担的任务的复杂性也在不断升级。与此同时,Web应用程序相对于传统专用客户端应用程序而言,其用户使用体验的不足也一直为人所诟病。基于浏览器的Web应用程序的发展一直面临着两方面的问题:一是如何使其更适合于实现更为复杂的较大规模的应用;二是如何给用户提供更好的使用体验。

在上述两个方面,XML都发挥了极其重要且不可替代的作用。在程序的结构方面,XML成功地扮演了“胶水”和“信使”的角色,这使程序的层次划分更为清晰而自然。这种结构层次的细化以及层次间耦合度的降低,使Web应用程序成功地进入了更广泛的应用领域,并显示了实现更为复杂的应用逻辑的强大能力。而在提高用户体验方面,由于各种基于XML的相关Web词汇的出现和应用,尤其是以XML为重要基础的Ajax技术和方法的日益普及,使浏览器表现出了毫不逊色于传统专用客户端的表现和交互能力。

可以肯定地说,今天的Web应用程序已经完全离不开XML。熟悉XML的概念和规则,并将其完美地应用于各种技术,已经成为对Web开发者非常重要的基本要求。本书对于XML的讲解全面而深入,并且收集了大量对开发工作非常有价值的资源。对于有志于从事Web开发的人们来说,本书既是一本优秀的XML教材,同时也是一本较全面的XML参考手册。

许劲松

2007年春

本章将介绍XML(可扩展标记语言),并解释它的一些基本概念。如果你对XML还比较陌生,这将是一个理想的起点。这里介绍的概念将在本书后续部分做更详细的阐述。 Web开发者往往对XHTML(可扩展超文本标记语言)很熟悉,但却经常搞不清它与XML的关系,也不清楚自己为什么需要同时学习XML。但是可以肯定的是,对于开发者来说,这两种技术都是重要的。

XML是用来编写其他语言(称为XML词汇)的元语言。XHTML是这些词汇中的一种,所以如果理解了XML,你也就能理解作为XHTML基础的一些规则。XHTML是遵循XML规则的HTML语言,后面我们将会介绍更多有关的内容。

XHTML有很多的局限性。虽然它擅长于组织Web浏览器中的信息并进行显示,但它的主要任务并不是对数据进行标记。XHTML无法提供一些高级功能,如不能对内容进行排序和过滤等。描述XHTML文档内容的标签不能自己进行定义。XHTML的标签是固定的,它们通常无法与其所包含内容的类型进行关联。例如,段落标签是可用于任何类型的内容的通用容器。

XML解决了这些HTML常见的局限性问题。它比HTML灵活性更高,因为它可以与其他一些支持表现、组织、转换和导航的标准一起工作。XML文档是自描述的,在它们的文档结构中可使用可描述的标签对其所标记的内容进行识别。

本章将更详细地讨论这些问题,对XML做更多的解释并说明为什么需要在你的工作中使用XML。本章将包含以下内容:

l XML的定义及其简史;

l 如何编写XML文档;

l 如何处理XML内容。

本章将首先介绍XML到底是什么,以及它适合于Web开发的哪些领域。

1.1 XML是什么

对XML第一点也是最重要的一点认识就是,它本身并不是一个编程语言,而是一个用于构造其他语言也就是所谓词汇的元语言。XML描述了创造这些词汇的规则。每种语言都互不相同,但都使用标签来标记内容。标签的名称和结构可自由选择。对于认同标准XML词汇的组织来说,这是通用的,这样他们就可对信息进行共享。 XML语言的一个例子就是XHTML。XHTML描述了一套标准的标签,这些标签只能以一种特定的方式使用。每个XHTML页面包含两个部分,分别使用和标签描述。每个部分都只能包含特定的标签。例如,不能将标签置于部分中。世界各地的Web开发者都有一个共同的标准方法,这样浏览器就知道如何来呈现XHTML标签了。

XML是W3C(万维网联盟)的推荐标准,这意味着它是可以免费使用的。W3C在它的术语表(/TR/DOM-Level-2-Core/)中提供了一个关于XML的更正式的定义,内容如下:

XML(可扩展标记语言)是SGML中的一个简单子集。它的目标是使通用的SGML可以如同当前的HTML一样,在网络上进行服务、接收和处理。XML设计得非常便于实现,且与SGML和HTML都具有互操作性。

1.1.1 XML简史

XML于1998年问世,它是基于SGML(标准通用标记语言)的。SGML是一个国际标准,可以将其理解为是定义其他文档标记语言的语言。HTML是基于SGML的。SGML最主要的问题是它难于使用,而XML的目标就是要变得更简单。

XML也从HTML中获益良多。HTML专注于内容的显示;你不能用它来完成诸如排序和过滤等更高级的功能。HTML不是一个非常精确的语言,它不区分大小写。即使不正确的HTML内容也可能被某个浏览器正确地进行显示。

XML纠正了HTML中的很多缺陷。1999年,HTML被使用XML语言构造规则改写为XHTML。XHTML文档的构造规则比HTML的要精确得多。这些规则的严格程度取决于在XHTML页面中所指定的文档类型声明(DOCTYPE)。第3章将对DOCTYPE进行更多的讨论。

从1998年起,XML已明显成为管理信息的一个强有力的方法。XML文档使数据易于共享。一系列相关的W3C推荐标准解决了在XML文档内进行转换、显示和导航的问题。第2章将会详细介绍这些推荐标准。

XML的要点总结如下:

l XML不是一个语言,它的规则用来构造其他语言; l XML创建了用来标记内容的基于标签的语言;

l XHTML是由XML创建的语言的一种,也是对HTML的重新构造;

l XML是基于SGML的。

1.1.2 XML的目标

SGML的异常复杂使W3C非常清楚地看到XML所要达到的目标。这些目标可参见/TR/REC-xml/#sec-origin-goals:

(1) XML应该在因特网上易用;

(2) XML应支持多种不同的应用;

(3) XML应与SGML兼容;

(4) 处理XML文档的程序应易于编写;

(5) XML中的可选特性将减到最小,理想状态为零;

(6) XML文档应是清晰、易读的;

(7) XML的设计应该比较快捷;

(8) XML的设计应该是形式化而精练的;

(9) XML文档应该易于创建;

(10) XML不追求标记的简洁。

这些目标中有几点值得注意。第一,W3C希望XML是非常简单的;实际上,好几个目标都包含了“容易”和“清晰”的含义。

第二,W3C赋予了XML两个目标:供人阅读和供XML处理程序处理。XML处理程序或者解析器是用来处理XML文档的软件包。处理程序可以识别XML文档的内容,也可以读、写或修改已存在的文档,或是直接创建新的文档。

其目的是通过保持开发的简单性来打开XML处理程序的市场。严格的构造规则意味着所需要进行的处理会比较少。因而也意味着XML文档可应用于移动设备,诸如手机和PDA。

通过使文档可供人阅读,你可以更方便地使用数据,也可以更容易地开发和调试应用程序。Unicode的应用程序开发者可以使用很多不同的语言创建XML文档。然而,其产生的问题是XML文档可能变得比较罗嗦,用XML来描述数据也会比采用其他方式更冗长。

Unicode

XML支持Unicode字符集以保证对多语言的支持。Unicode提供对231字符的支持。它包含了你可能需要的每一个字符,同时也有很多是你永远也用不上的。

可以使用8位Unicode转换格式(UTF-8)来编码Unicode字符,从而使得这些字符与它们在ASCII中的编码保持一致。显然,这提供了与老系统更好的兼容性。中文和日语这样的语言需要UTF-16编码。可以在中了解更多关于Unicode的内容。

第三,请注意术语XML文档(document)。这个术语的含义比传统意义上的物理文档更为丰富。一些XML文档以物理形式存在,但另一些是作为遵循XML构造规则的信息流的形式创建的。例如,Web 服务以及内容以XML形式返回的数据库调用结果。

在理解了XML是什么以后,现在来深入地研究XML语言的构造规则。

1.2 XML语法

XML语言使用标签来标记文本。作为Web开发者,你应该很熟悉标记文本的含义:

上面一行是XHTML,同时也是XML。在XHTML中,

标签表示一段文本。XHTML中的所有标签都有预先定义好的含义。

XML允许你创建自己的标签,因而你可以将原先的标记改写为:

在本例中,标签说明了标记了的文本的含义。XML的一大优势就是它的标签可以描述其内容——这也就是为什么XML语言会经常称为自描述的(self-describing)。 XML足够灵活,可以容许创建多种类型的语言以描述数据。对这些XML词汇的唯一限制就是,它们必须是合式的(well-formed)。

1.2.1 合式的文档

XML文档如果满足下列条件就是合式的:

l 该文档包含一个或多个元素;

l 该文档只包含一个文档元素,用于包含其他元素;

l 每个元素都应正确地结束;

l 元素都是区分大小写的;

l 属性值都括于引号中并且不为空。

本章将讨论所有这些条件。现在有必要强调其中的一些要点。XML是区分大小写的,这就意味着标签与标签并不相同。在XML中,这是三个不同的标签。在XHTML之前,HTML是不区分大小写的,因而和是相同的标签。

所有的XML标签都需要一个对应的以同样大小写书写的结束标签。因此标签必须有一个匹配的标签。如果在开始和结束标签中没有内容存在,那么可以将之缩写为一个标签。在HTML中,有可能只写一个单独的

标签就添加一个段落。

在XML中,标签的顺序是重要的。最先开始的标签必须最后结束:

HTML页面没有这样的要求。下面的例子在HTML中是正确的,但是在XML中却是不可接受的:

在XML中,属性中的值总是用引号括起来的:

使用单引号或双引号都没有关系,但是必须使用引号。这在HTML中并不是必需的。同样地,一些HTML属性,例如标签中的nowarp属性,并不需要包含一个属性的名称和值对:

这种形式的标签书写方式在XML中是不行的。必须将它换成如下所示的样子:

1.2.2 标签和元素的不同

你可能已注意到,我在谈论XML文档时使用了标签(tag)和元素(element)这些术语。乍一看,它们似乎是可以互换的,但其实二者之间是有些不同的。

元素描述的是一个开始标签和一个结束标签以及其中的内容;而标签则是元素的一部分。标签以一个左尖括号开始,以一个右尖括号结束。元素通常包含开始标签和结束标签以及二者之间的内容。

下一行表示一个包含标签的完整元素:

在理解了构造规则后,下面认识一下完整的XML文档。

上一页 首页 下一页

1.3 查看完整的XML文档

一段完整的XML称为文档。不管是用于标记文本的XML,或者是从服务器端请求回来的信息,再或是从数据库返回的记录,所有这些都是文档。

每个XML文档都是由标记和字符数据组成的。总地来说,字符数据包含开始标签和结束标签之间的文本,其他的都是标记。而标记可以进一步划分为元素、属性、文本、实体、注释、CDATA和处理指令。 下面的文档列举了XML文档的不同组成部分。该文件和其他资源文件可以从Apress网站()的源代码区中下载。这个文档名为,它描述了一个小型DVD库的内容:

下面来浏览这个文档。首先,它由XML声明开始:

该声明是可选的,它包含一些属性,稍后会加以介绍。

这个XML文档还包含一个注释以说明它的用途:

这个注释是为所有阅读文档的读者提供的指南。对于XHTML来说,开发人员通常使用注释来添加一些说明。

文档元素(或称根元素)起名为。值得注意的是,本文档内所有的元素都包含在一个开始和结束标签中。

文档元素包含几个元素,每个元素包括、<format>和<genre>元素。<DVD>元素中还包含一个id属性: </p><p> </p><p>文档节点 </p><p> 每个<title>、<format>和<genre>元素中都含有文本。 </p><p>通过标签的名字可以很容易地理解该文档的结构和内容。很显然,即使不用注释也能明白该文档描述的是一组DVD,而且也很容易推断出文档中各元素之间的关系。 </p><p>1.3.1 XML文档的结构 </p><p>每个XML文档都分为两个部分:序言(prolog)和文档元素(或称根元素)。序言出现在XML文档的顶部,其中包含关于该文档的一些信息。它有点像XHTML文档中的<head>部分。在上面的XML文档中,序言包含了一个XML声明和一个注释。它也可以包含其他的元素,如处理指令或是DTD(文档类型定义),详细内容可参见1.3.3节的“处理指令”和“DTD和XML模式”部分。 </p><p>合式的XML文档必须有一个文档元素用以包含可能有的其他内容。XML文档中的所有内容都应该出现在文档元素或根元素的内部。在XML文档示例中,文档元素就是<library>,它包含了所有其他元素。 </p><p>你可能对在XML文档中为元素所起的名字感到疑惑。在遵守XML命名规则的前提下,可以为元素和属性选择任何名字。 </p><p>图1-1显示了XML文档的结构。 1.3.2 XML的命名规则 </p><p>在XML文档中,元素、属性和一些其他结构是有名字的。名字是由一个起始字符加上名字字符组成。别忘了XML名字是区分大小写的。 </p><p>起始字符必须是一个字母或下划线,不能是数字。而名字字符可以是除了空格和冒号以外的所有字符。冒号在XML中表示命名空间,所以不能将之用于名字中。第2章将更详细介绍命名空间。为了确保使用合法的字符,最好严格使用罗马字母(大小写均可)、数字和标点,冒号除外。 </p><p>在自己书写而不是自动产生XML的内容时,最好采用标准的命名规范,而且应该使用具有描述性的名字。 </p><p>我习惯以CamelCase方式命名并且以小写字母开始,除非在有些情况下元素名字通常就是大写的: </p><p> </p><p>通常我会避免在名字中使用下划线字符,因为我觉得这会让名字更难读。 使用具有描述性的名字可以使人更易于理解。想像一下读到下面内容时你会遇到的困惑: </p><p> </p><p>下面来总结一下XML的命名规则: </p><p>l XML名字不能以数字或标点符号开头; </p><p>l XML名字不能包含空格; </p><p>l 如果不是表示命名空间,就不要在名字中包含冒号; </p><p>l XML名字是区分大小写的。 </p><p>下面将更详细地描述XML文档的内容。首先从可能出现在序言中的元素开始。 </p><p>1.3.3 XML文档序言 </p><p>XML文档的序言里包含了关于文档本身的元信息,而不是文档的内容。它可能包含XML声明、处理指令、注释以及嵌入的DTD或模式。 </p><p>1.XML声明 </p><p>XML文档通常都以一个XML声明开始,虽然这并不是必需的: </p><p> </p><p>在XML文档中,包含一个声明是好的做法,因为它可以告诉应用程序或人随后的是一段XML内容。它还能向处理程序提供关于该文档的额外信息,比如它的字符编码类型。 </p><p>如果在XML中包含声明,就必须将它置于文档的第一行。任何内容都不能放在XML声明前面,空格也不行。如果你不小心在声明前面放了一个空格,XML处理程序就将无法正确解析文档的内容,并且会产生错误消息。 </p><p>XML声明中还可以包含一些属性,这些属性提供关于版本、编码以及文档是否独立的信息: </p><p> </p><p>在本书的写作期间,XML的最新版本是1.1。然而,很多处理程序还不支持这个版本,所以最好还是坚持将版本声明为1.0以保持向后兼容。 声明中的encoding属性描述的是XML文档的字符集。如果没有包含encoding属性,则文档会被认为使用UTF-8编码。 </p><p>声明中的standalone属性的值只能为yes或no。这个值表示要正确处理当前的文档是否还需要外部文件。 </p><p>XML声明中的每个属性都是可选的,但是它们的顺序很重要。如果需要包含encoding属性,那它必须出现在version属性的后面。而standalone属性只能是声明中的最后一个属性。 </p><p>2.处理指令 </p><p>序言中还可包含处理指令(processing instruction,PI),它们将关于XML文档的信息传递给其他应用程序。XML处理程序并不处理PI,而是将它们原封不动地传递给应用程序。 </p><p>PI以<?开始而以?>结束。它们通常会在序言中出现,虽然它们也可出现在XML文档内的其他地方。 </p><p>注解 XML声明也以<?xml开始。虽然看起来相似,但是还是需要记住XML声明与PI是非常不同的。 </p><p>下面的PI指定了一个到XSL样式表的引用: </p><p> </p><p>PI中的第一项是一个名字,称为PI目标。上面的PI的名字是xml-stylesheet。以xml开头的名字被保留为XML专用PI的名字。这个PI还有一段文本字符type="text/xsl" href= ""。虽然看起来像是两个属性,但是这段内容却并不是这么处理的。在第6章和第7章中还会有更多样式表PI的例子。 </p><p>3.注释 </p><p>注释几乎可以出现在XML文档的任何地方。上面的XML文档例子中在序言里包含了一段注释,所以我们在了解其他序言内容时也看一看注释。 </p><p>XML注释看起来与XHTML注释一样。它们以<!--开始而以-->结束: </p><p> 注释并不影响XML文档的处理,通常是为了便于阅读和理解的。在添加注释时需要遵循以下规则: </p><p>l 注释里不能包含文本-->; </p><p>l 注释不能包含于标签内部; </p><p>l 元素中的开始标签或结束标签不能被注释掉; </p><p>l 虽然大多数XML处理程序都会把注释传递给应用程序,但并不一定必须这么做。 </p><p>4.DTD和XML模式 </p><p>DTD和XML模式提供关于XML文档内的元素和属性如何出现的规则。也就是说,它们确定哪些元素和属性是有效的,哪些是必需的或可选的。 </p><p>序言中可以包含关于XML文档的声明,也可以包含一个到外部DTD或模式的引用,或是两者都包括。第2章将详细介绍DTD和模式。 </p><p>1.3.4 XML文档元素中的段 </p><p>XML文档中的数据存储在文档元素或根元素内。这个元素包含文档中的所有其他的元素、属性、文本和CDATA,同时也可包含实体和注释。 </p><p>1.元素 </p><p>在XML文档中,元素有很多作用,它们 </p><p>l 可以标记内容; </p><p>l 为它们标记的内容提供一些描述; </p><p>l 为数据的顺序和相对重要性提供信息; </p><p>l 展示数据之间的关系。 </p><p>元素包括一个开始标签、一个结束标签和内容。内容可以是文本、子元素或是二者都有。元素的开始标签中也可包含属性。在元素内部可以放置注释。 </p><p>在前面的例子中,可以看到<DVD>元素的内部结构如下: </p><p> 开始标签<DVD>有一个id属性以及三个其他元素:<title>、<format>和<genre>,其中每个元素都包含有文本。 </p><p>在前面说过,必须按照正确的顺序打开和关闭标签。下面的写法是错误的: </p><p> </p><p>一共有四类元素: </p><p>l 空元素; </p><p>l 仅含文本的元素; </p><p>l 仅含子元素的元素; </p><p>l 含子元素、文本或混合元素的元素。 </p><p>第2章关于XML模式的内容将介绍区分这些不同类型的元素是多么重要。 </p><p>q 空元素 </p><p>如果元素中不包含任何文本,那么它就是个空元素,可以以两种方式书写。下列两段代码是完全相同的: </p><p> </p><p>第二行的标签使用一种省略的写法,即在结束标签的尖括号前面加上一个正斜杠。XHTML中<br/>标签也是空元素的一个例子。使用空元素写法可以减小文件的大小并使文档更清晰易读。 </p><p>q 仅含文本的元素 </p><p>有些元素仅含文本内容。从前面的例子中可以看到,<title>、<format>和<genre>都是仅含文本的元素: </p><p> </p><p>q 含其他元素的元素 </p><p>一个元素可以仅包含其他的元素。容器元素称为父(parent),被包含的元素称为子(child)。<DVD>元素就是一个包含子元素的元素: 描述XML中的元素结构时经常使用族谱来作类比。 </p><p>q 混合元素 </p><p>混合元素既含有文本也含有子元素。上面DVD的例子并没有包含这种类型的元素。下面的代码片段显示了一个混合元素: </p><p> </p><p>综上所述,元素有以下条件: </p><p>l 元素必须含有开始标签和结束标签。在没有内容的情况下,才可以使用省略写法; </p><p>l 标签名称必须符合XML命名规则; </p><p>l 元素必须正确地嵌套。 </p><p>2.属性 </p><p>在XML文档中,提供信息的另一种方法就是在元素的开始标签中使用属性。属性通常为它们所修饰的元素提供额外的信息。一个元素中可以出现的属性的数量是没有限制的。 </p><p>属性由名称/值对组成,其中值是包含于单引号或双引号中的: </p><p> </p><p>属性为元素提供额外的信息: </p><p> </p><p>在这个例子中,数据Introduction to XML封装在<p>元素内部。此元素告诉Web浏览器另起一段显示信息。而style属性提供了如何显示数据的额外信息。这里是告诉浏览器将文本置中。 </p><p>属性的两种通常用法是转换信息格式和指定特定的格式或编码。例如,可以这样转换日期格式: 或者指出使用国际标准化组织(ISO)的日期格式,如下所示: </p><p> </p><p>当元素包含属性时,常称为复合类型(complex type)元素。后面将会看到,这在书写XML模式文档时是很重要的。 </p><p>在同一个元素内,可以为不同的属性分别使用双引号或单引号,如: </p><p> </p><p>请注意,不要在同一个属性中分别使用单引号和双引号,否则文档就不是合式的了。 </p><p>注意 从文字处理文档中剪切属性粘贴到XML文档中时要十分小心。文字处理软件通常使用小引号,而这会在XML文档中引起错误。 </p><p>还可以将属性改写为嵌套的子元素。例如<DVD>元素 </p><p> </p><p>可改写为: </p><p> </p><p>关于哪种写法更好并没有一个明确的规则。两种写法都是可接受的。 </p><p>现在总结一下与属性相关的规则: </p><p>l 属性由名称/值对组成; </p><p>l 属性值必须封装在单引号或双引号中; </p><p>l 属性中不能含有XML标签; </p><p>l 属性名称必须遵循XML命名规则。 </p><p>3.文本 所有XML文档内部的文本都包含于开始标签和结束标签内部。除非该文本被标记为CDATA,那么它将会被认为是XML,从而做相应的处理。也就是说,左尖括号会被认为是某个XML标签的一部分。 </p><p>如果希望在文本中使用保留的字符,那么必须将它们写为字符实体。例如,可以将左尖括号<写作<。保留字符也可以嵌入到CDATA中。 </p><p>4.CDATA段 </p><p>CDATA可以对文本块进行标记,这样它们就不会被当作XML进行处理。前面曾提到过,这对于包含XML保留字符的文本来说是非常有用的。 </p><p> </p><p>此CDATA段以<!CDATA[开始,并且以]]结束。字符数据包含于左右方括号之间。显然,字符串]]是不能出现在CDATA段中的。 </p><p>CDATA段可用于在XML文档中嵌入代码,如JavaScript代码,或者加入不需要处理的内容。例如,当一个应用程序从数据库里读取数据并且将它标记在XML文档中时,它可能将所有的内容都嵌入到CDATA段中,以避免对那些保留字一个一个地进行处理。第3章会介绍一个关于JavaScript的使用CDATA的例子。 </p><p>5.实体 </p><p>字符实体是表示单一字符的符号。在XHTML中,字符实体被用于表示一些特殊的符号,如与号&(&)和不间断空格( )。 </p><p>在XML文档中,可以用字符实体替代保留字符。因为所有的标签都以左尖括号开始,所以在一个元素的文本中是无法包含这个字符的: </p><p> </p><p>如果需要处理这个元素,文本25前面的左尖括号就会引起一个处理错误。这种情况下,应该以实体<来替代这个符号,如: </p><p> </p><p>以下这些保留符号是需要注意的: </p><p>l <,表明一个标签的开始; l &,表明一个实体的第一个字符; </p><p>l xml,保留为用于对XML语言其他部分的引用,如xml-stylesheet。 </p><p>表1-1总结了常用的字符实体。 </p><p>表1-1 XML文档中使用的字符实体 </p><p>字 符 </p><p>& </p><p>' </p><p>> </p><p>< </p><p>" </p><p>实 体 </p><p>& </p><p>' </p><p>> </p><p>< </p><p>" </p><p>有时一些字符是不能加入到XML文档中的,也许因为这些字符不在键盘上或者它是图形字符。在这种情况下,可以使用Unicode或十六进制数字将它们以字符实体的形式加入。比如,可以将版权符号ã编码成©或©。 </p><p>以&#开始并以分号结束的引用都是字符引用。中间的数字是所需字符的Unicode编码。如果编码写成十六进制形式,那么它的前面有一个x作为前缀。 </p><p>实体也可以自己定义。比如,可以将Copyright 2006 Apress定义为©right;。每次需要在XML文档中包含这段文字时,都可以使用实体引用©right;。这使文本更容易管理和更新。 </p><p>现在继续了解XML文档的处理。 </p><p> </p><p>1.4 XML的处理模型 </p><p>XML推荐标准假设XML文档是以一种特定方式处理的。下面这个模型说明XML处理程序将XML文档的内容和结构都传递给应用程序。XML处理程序通常也称为XML解析器,因为它们对XML文档进行解析,如图1-2所示。 图1-2 XML文档处理模型 </p><p>常见的XML处理程序有微软的XML Parser(MSXML)、Apache Xerces2和Oracle XML parser,可以在应用程序中使用任意一种。一些XML解析器也可以以软件包的形式自动安装。用于在Web浏览器中显示XML的XSLT(可扩展样式表语言转换)处理器就是这种类型。MSXML包含了XML解析器和XSLT处理器,它即是一个XML处理器也是一个应用程序。它随IE和其他微软的软件一起自动安装。 </p><p>1.4.1 XML处理方式 </p><p>XML有两种处理方式:基于树的和基于事件的。很多XML解析器,包括MSXML的最新版本,对两种模型都支持。基于树的解析器通常也称为DOM(文档对象模型)解析器,而基于事件的解析器通常被称为SAX(XML简单应用编程接口)解析器。二者都是以它们支持的规则命名的。 </p><p>DOM是W3C推荐的XML文档应用编程接口(API)的标准。所有的应用程序都可以使用这个API来操作XML、读取信息、添加节点以及编辑当前的内容。关于这个推荐标准可以在/TR/REC-DOM-Level-1/中了解到更多内容。 </p><p>SAX并不是W3C的推荐标准,但也得到了大大小小软件公司的支持。基于SAX的解析器顺序地读取XML文档,当它遇到文档中的重要部分时会触发事件,比如在元素的起始或结束位置。在/中可以了解到其更多内容。 1.4.2 DOM解析 </p><p>图1-3表示的是前面所述文档的树型结构。 </p><p>以这种方式显示文档进一步强调了在族谱中元素之间的关系。<library>元素是<DVD>元素的父元素,也是<title>、<format>、<genre>元素的祖元素。<DVD>元素相互为兄弟,它们共有一个<library>元素作为父元素或祖先元素。<title>、<format>和<genre>元素是<library>元素的子孙元素。 </p><p> </p><p>图1-3 以树型结构显示的文档 </p><p>DOM解析允许通过编程语言或是脚本语言(如JavaScript)访问这些元素以及它们的值,还可访问文档中的所有其他部分。 </p><p>1.4.3 SAX解析 </p><p>基于SAX的解析器以一串事件的形式展现XML文档。必须对每个事件编写处理程序,这样当事件触发处理程序时会产生相应的结果。 </p><p>这种形式的解析对于有良好事件处理机制的语言非常适用。例如,SAX解析在Java中很常用。它对于网络上经常采用的脚本语言不太适用,因此这里就不详细讨论了。 </p><p>1.4.4 为什么有两种处理模型 </p><p>两种处理模型都有其优点。基于DOM的解析提供了对XML文档的完整的读写访问,并且可以通过遍历文档树对文档内的节点进行访问。它还可以对照DTD或XML模式来判断一个文档是否有效。 然而,基于DOM的解析必须将XML文档整个读入内存中,所以当遇到较大的XML文档时,DOM解析可能会变得较慢而且比较消耗内存。很难准确判断何种XML文档才是过大的,因为处理时间会根据处理能力、内存、可用时间以及是否在单用户或多用户环境下工作(比如Web服务器)而变化。一般而言,大多数系统可以处理大至几十兆的文件,但是对于更大的文件就需要十分小心了。 </p><p>另一方面,基于SAX的模型是串行操作的。一个节点被处理后就被丢弃了,并且不会再被处理。整个文档并不一次性地读入内存,这样就避免了由较大的XML文档而引起的处理问题。这种处理方法将由用户负责保存XML文档中的可供后续使用的信息。 </p><p>举例来说,对于一个通信系统的中间路由程序来说,SAX是理想的。一个读入的XML文档通常只有一个很小的路由首部信息,但却有需要发送到终点的较大文档。使用SAX模型时,路由设备可以仅读取路由信息而忽略掉整个文档,因为文档与传送并无关系。然而,基于DOM的解析器却需要在读取整个文档后才可以将之传送到终点。 </p><p> </p><p>1.5 一些XML工具 </p><p>开发者通常都希望了解有哪些工具可以用于操作XML文档。可用的工具有很多,有免费的也有需要购买的,这里不可能将它们都汇总起来。对工具的选择可能更取决于个人的喜好。 </p><p>总地来说,XML开发工具分为几类: </p><p>l 现有编程IDE的扩展; </p><p>l XML专用的IDE; </p><p>l 独立工具。 </p><p>诸如Microsoft Visual Studio(/vstudio/)的开发工具就属于第一类。它们有专门针对开发者的对XML的良好支持。在本书写作时,它的最新版本是Visual Studio 2005,主要具有以下特性: </p><p>l 它可以帮助建立和编辑XML文档,并且可以检查文档是否是合式的; l 提供对XML模式的支持,包括可以从文档实例、文档有效性和DTD中推导模式; </p><p>l 提供对XSLT的支持,包括可以查看转换的结果。 </p><p>专用的XML IDE大多具有相似的基础功能,而在支持程度和用户界面上差别较大。大多数这些工具都有一个XML编辑器、用于创建DTD和XML模式的工具以及对XSLT开发的支持。这样的工具有不少,以下是其中常见的一小部分: </p><p>l Altova的XML组件:/; </p><p>l TIBCO Software的XML工具组件:/software/business_integration/xml_ ; </p><p>l DataDirect Technology的Stylus Studio:/。 </p><p>上面提到的这些组件大多都包含编辑XML文档的工具。其中有: </p><p>l Altova的XMLSpy:/products_; </p><p>l Blast Radius 的XMetal:/index.x?products/xmetal/; </p><p>l SyncRO Soft的<oXygen>:/。 </p><p>除此之外,还有很多非常好的工具。你可以在因特网上搜索,也可以加入到一些邮件列表中,比如XML-DEV(/xml/xmldev/shtml)。 </p><p> </p><p>1.6 小结 </p><p>本章介绍了一些与XML相关的基本概念,对某些语法做了较详细的讲解,演示了XML给Web开发者带来的好处,还介绍了一些用于XML文档的工具。 </p><p>第2章会介绍一些相关的XML推荐标准,以及如何使用DTD和XML模式。另外,还会简单介绍一下XSLT、XPath、XLinks和XPointer。 </p><p> </p><p>上一章介绍了XML文档及其构造规则。XML是万维网联盟(W3C)制订的一系列相关推荐标准中的一个。本章将介绍在开发XML应用程序时可能会用到的一些推荐标准。具体而言包括: </p><p>l 命名空间在XML中的作用; </p><p>l 使用DTD和XML模式来定义XML词汇; </p><p>l 使用XSLT显示XML; l 使用XPath在XML文档中导航; </p><p>l 使用XLink和XPointer链接到XML文档。 </p><p>本章使用的文件可以从Apress网站()的源代码区下载。现在,首先看看使用XML文档时命名空间的重要性。 </p><p>2.1 XML命名空间的作用 </p><p>XML文档可以创建自定义的元素和属性词汇来描述数据。当XML文档较为复杂或是需要从别的地方取得内容时,一个文档中有可能会需要不止一个词汇,这样就会产生名称相同而含义不同的元素出现在不同词汇中的情况。 </p><p>例如,如果需要建立一个含有XHTML信息的家具目录: </p><p> </p><p> </p><p> </p><p>在这个XML文档中,同样名为<table>的两个元素却有着完全不同的含义。 </p><p>命名空间可以指明哪个元素属于哪个词汇。它可以为每个词汇指定唯一的前缀进行识别,再将该前缀应用于XML文档中的元素上: 虽然有一些惯例可以遵循,但这里选择的前缀并不理想。在上个例子中,第一个前缀cat表示的是目录项。你同样可以将之称为dog或catalog。第二个前缀xhtml表示的是文档中的XHTML元素。这是一个符合命名空间惯例的例子。 </p><p>命名空间使用统一资源定位符(URI)来识别每个词汇。在上面包含XHTML内容的例子中,URI是由W3C控制的,因为它控制着XHTML标准。你也可以将cat前缀置于自己的控制之下。 </p><p>值得注意的是,URI并不一定需要指向一个实际的文档或目录。对它仅有的要求就是,在XML文档中它必须是唯一的。然而很多处理程序,包括XML模式、XHTML和XSLT处理程序,都使用URI来注明它们必须处理文档的某一部分。因此,对于这些应用程序需要使用正确的URI。 </p><p>在/TR/REC-xml-names/中可以找到W3C关于“XML中的命名空间(Namespaces in XML)”的推荐标准。 </p><p>2.1.1 在XML文档中加入命名空间 </p><p>为了引用一个命名空间,可以将其以属性的形式加入任何包含了属于该命名空间中元素的节点中。命名空间经常加在文档元素中,因为它包含了所有其他的元素。在上面的XML文档中,最开始的元素可改写为如下形式: </p><p> 这决定了命名空间cat指向URI /ns/furniture。命名空间cat可置于任何元素名字前,并以冒号分开: </p><p> </p><p>2.1.2 添加默认命名空间 </p><p>一个XML文档的大部分通常都属于一个XML词汇。在这种情况下,可以定义一个默认的命名空间,而不是为每个元素重复地添加命名空间前缀。可以使用xmlns关键字来定义默认的命名空间。这样,就不用为默认命名空间内的元素指定前缀了。 </p><p>例如,可以将catalog指定为默认命名空间: </p><p> </p><p>现在这是默认的命名空间了,因而就不必再在此命名空间内的元素名前加上前缀了。 </p><p>可以在文档中的任何位置声明默认命名空间。被声明的默认命名空间适用于包含了声明的元素及其所有子元素,而且会覆盖此前所做的声明。 </p><p>下面的XML文档演示了如何使用多个默认命名空间: </p><p> </p><p> </p><p>默认的catalog命名空间适用于除了包含于第二个<table>元素内的所有元素。因为加入了命名空间声明,下面元素默认的就是XHTML命名空间: </p><p>关于命名空间的最后一点是关于它们使用的属性。默认情况下,属性与它包含的元素属于同一个命名空间中。除非你使用的是不同于其包含元素的其他命名空间中定义的属性,否则就不必进行验证。 </p><p>在关于如何使用DTD和XML模式定义XML词汇的内容中,将会进一步说明命名空间的重要性。 </p><p> </p><p>2.2 定义XML词汇 </p><p>基于XML的语言通称为XML词汇,可以用DTD、XML模式或是其他模式语言对其加以定义。很多工业组织共同定义了他们自己的XML词汇。 </p><p>如果需要使用XML词汇,就必须了解其构造规则。这些规则是产生符合语言构造标准的有效的XML文档的保证。 </p><p>这些规则也使XML处理程序可以检查XML文档的一致性。这个过程称为有效性检查,进行这项工作的处理程序称为有效性解析器。第1章提供了一些如何处理XML文档的信息。 </p><p>可以通过编写模式来共享XML词汇的规则。这是一个人或有效性处理器都可用的规范描述。如果只是在某个孤立的应用程序中使用XML文档,这种词汇的制定可能显得过分了。其真正的意义在于,当这个语言需要被其他人或应用程序共享时,每个用户都可以检查文档是否构造正确。 </p><p>有两种常用的模式:DTD和XML模式。它们都由W3C定义并由他们控制。实际上,DTD本身就是XML推荐标准的一部分。 </p><p>这里还是使用第1章中DVD库的例子: 首先看看如何建立一个DTD来描述这个词汇。 </p><p>2.2.1 文档类型定义 </p><p>DTD描述的是文档的结构,它指明一个元素可以出现多少次、它是否可选的以及它是否包含属性等等。 </p><p>有效性解析器可以根据其DTD来检查一个XML文档是否有效。如果不是,解析器会报告一个错误。符合某个DTD的XML文档称为该DTD的一个文档实例。 </p><p>本书并不是一部关于DTD的完整参考手册,但它包含了理解和构造DTD所需要的足够的信息。下面的DTD定义了DVD库文档: </p><p> </p><p>这份文档被保存为,可以在本书下载资源中找到。引用这个DTD的XML文档称为dvd_,其实叫什么名字并不重要。 </p><p>这个DTD中演示了两种声明的类型,一种用于声明元素,另一种用于声明属性。其中还可以添加实体和符号的声明。但是符号声明并不常用,所以在稍后的“实体声明”部分中只对实体声明加以介绍。 </p><p>1.元素类型声明 元素类型声明提供的是关于元素的信息。该声明以!ELEMENT文本开始并且列出元素名及其内容。内容可以是数据类型或是列在DTD中的其他元素: </p><p> </p><p>空元素中显示的是EMPTY: </p><p> </p><p>在下面的DTD例子中,<DVD>元素包含了三个其他元素:<title>、<format>和<genre>: </p><p> </p><p>其中元素的顺序也指定了它们应该出现在XML文档实例中的位置。 </p><p>解析字符数据(PCDATA)说明元素的内容是文本,并且XML解析器应该将此文本解析成字符和实体引用。<title>、<format>和<genre>声明中将它们的内容类型定义为了PCDATA: </p><p> </p><p>可以用一些修饰符来对子元素提供进一步说明。这些修饰符可参见表2-1。 </p><p>表2-1 DTD中元素类型定义所用的符号 </p><p>符 号 </p><p>, </p><p>+ </p><p>| </p><p>() </p><p>* </p><p>? </p><p> </p><p>解 释 </p><p>规定子元素的顺序 </p><p>规定元素必须出现至少一次(一次或多次) </p><p>允许从一组元素中选择一个元素 </p><p>将内容标记成一个组 </p><p>规定元素为可选,可以出现任意多次(零次或多次) </p><p>规定元素为可选,如果出现,只能有一次(零次或一次) </p><p>无符号表示元素必须出现一次 </p><p><DVD>元素中包含了一个+号,这表明该元素必须至少出现一次,也可出现多次: 2.属性列表声明 </p><p>属性声明出现在元素声明之后,它更复杂一些。可以通过添加属性列表声明表明元素中包含属性: </p><p> </p><p>本行中,<DVD>元素有一个必需的称为id的属性,其中包含的是CDATA。 </p><p>注解 设置必须属性时并不会影响DTD中其他元素的声明。在该元素中包含子元素,而且也称为id,是完全可以的。 </p><p>最常用的属性类型为CDATA,但也可以声明为其他的类型: </p><p>l ID:一个唯一的识别符; </p><p>l IDREF:另一个元素的ID ; </p><p>l IDREFS:其他元素的一列ID; </p><p>l NMTOKEN:一个有效的XML名字; </p><p>l NMTOKENS:一列有效的XML名字; </p><p>l ENTITY:一个实体名字; </p><p>l ENTITIES:一列实体名字; </p><p>l LIST:一列特定值。 </p><p>关键字#REQUIRED表明此属性必须存在。也可以用#IMPLIED来表明一个可选属性。用#FIXED来表明此属性只能有一个值。如果XML没有包含这个属性,有效性解析器就会插入一个固定值。使用不是固定值的值会产生解析器错误。 </p><p>如果需要指定属性可选的值,可以使用管道字符(|): </p><p> </p><p>此行表明<product>元素有一个color属性,其可能的值为红色、绿色或蓝色,默认值为红色。 </p><p>3.实体声明 第1章中介绍了如何使用内建实体类型,也提到了可以自己定义实体以表示固定的数据。例如,可以将实体引用©right;指定为文本Copyright 2006 Apress。在DTD中可以这样定义这个实体: </p><p> </p><p>这是个简单的内部实体声明。也可引用外部实体并用它将大量的内容包含在XML文档中。这与在XHTML文档中使用服务器端的包含文件比较类似。 </p><p>下面的XML文档引用了几个实体: </p><p> </p><p>这个文档从几个实体中取得它的内容,每个实体都代表一个外部XML文档。DTD需要为每个实体都添加一个声明。例如,可以将tableOfContenets实体定义如下: </p><p> </p><p>4.将DTD关联到XML文档 </p><p>目前已经介绍了如何构造DTD,但还没说明如何将之关联到XML文档。可以将DTD嵌入到XML文档内部,也可在文档中添加对外部DTD的引用。 </p><p>对外部DTD的引用可以添加在XML文档的序言中: </p><p> </p><p>也可将DTD直接嵌入到XML文档的序言中: 这个保存为dvd_embedded_的文件可以在资源文件中找到。 </p><p>内部和外部DTD也可以同时使用。如果在元素和属性定义中有冲突发生,以内部DTD为准。 </p><p>使用外部DTD的情况比较常见。这种方法可以用一个DTD文件来验证多个XML文档的有效性,也使DTD和文档实例更易于维护。 </p><p>嵌入的DTD可以用来重载外部DTD。这与用嵌入的CSS声明来重载外部样式表非常类似。 </p><p>如果应用DTD的文档是孤立的,使用嵌入的元素和属性声明会更加简单方便。即使不需要定义元素和属性,还是有可能需要定义实体的。 </p><p>注解 如果包括一个对外部DTD的引用,且该DTD中含有实体定义,则必须将XML声明中的standalone属性设置为no: </p><p> </p><p>现在再来看看另一个更为常用的XML有效性判断语言——XML模式。 </p><p>2.2.2 XML模式 </p><p>XML模式与DTD有很多相似的地方。例如,两者都用于确定XML文档的结构。通过阅读www//TR/xmlschema-0/上的W3C初级文档可以了解更多关于XML模式的内容。 </p><p>DTD与XML模式也有很多不同。首先,XML模式语言是XML词汇的一种。XML模式比DTD功能更强,包含很多概念,如数据类型和继承等。然而,与DTD相比,它们的构造也更为复杂。另一个缺点就是XML模式没有提供与DTD实体声明相同的功能。 </p><p>关于XML模式的一个重要方面就是,在XML文档中,模式处理程序是一个个地验证元素的有效性的。这就使不同的元素可以依据不同的模式进行有效性验证,也使逐个地验证每个元素的有效性成为可能。如果文档中的每个元素根据适当的模式都被验证为有效的,则这个文档就是有效的。 </p><p>这种元素级别的有效性验证有一个缺点,即XML模式并不提供确定文档元素的方法。因此,如果元素都是有效的,文档就是有效的,而不管其中是否包含了文档元素。 </p><p>首先看看描述文档结构的模式: </p><p> </p><p> </p><p> </p><p>直观看来,这个模式与此前的DTD有着很大的不同。最明显的区别就是,模式是基于标签的并且使用命名空间。由于是通过使用XML来创建模式词汇,因此可以利用一些标准的XML创建工具。XML模式也包含了一些适用于元素和属性的数据类型。例如,id属性使用的数据类型是xs:integer。 </p><p>现在我们通览一遍这个模式文档。它以一个标准XML声明开始。文档元素称为schema,其中包含了一个到XML模式命名空间/2001/XMLSchema的引用: </p><p> 按照惯例,这个命名空间通常用前缀xsd或xs进行关联。本例中用的是xs前缀。 </p><p>这个模式中使用的是Russian Doll符号,其中元素的声明位于文档的相应位置。也就是说,元素声明的嵌入点也预示着元素的相对位置。将模式文档组织成其他形式也是可以的。 </p><p>第一个定义的是文档元素<library>。由于它是<xs:schema>元素的子元素,因而有着全局的作用域。也就是说,该元素的定义在XML模式内部的任何位置都是可用的。可以在模式文档内部的不同位置重用该元素的定义。全局元素也可是一个有效的文档实例的文档元素。 </p><p>定义包括如下内容: </p><p> </p><p>这些声明将元素定义为复合类型(complex type)元素,这就表示它会以某种顺序(<xs:sequence>)包含某些其他元素。复合类型元素包含其他的元素或者至少一个属性。因为<library>元素包含了该文档中所有其他的元素,所以必须将之定义为复合类型元素。稍后会演示一个声明简单类型元素的例子。 </p><p>通过使用<xs:sequence>声明了<library>元素包含了一系列的子元素。这可能看起来有点奇怪,因为它只是包含了可能不断重复的一种元素。也可以通过使用<xs:choice>来指定从一组元素中选择一种,也可以使用<xs:all>来表明以任何顺序选择所有元素。 </p><p><library>元素只包含一种<DVD>元素,它可能出现至少一次,也可出现多次。这可用下面的方式来声明: </p><p> </p><p>如果元素恰恰只出现一次,就可以省略掉minOccurs和maxOccurs属性。 </p><p><DVD>元素包含子元素,因此它是包含其他元素的复合类型元素,同样在顺序上有: </p><p> 子元素是简单类型的,因为它们只包含有文本。如果它们包含属性,它们就会自动成为复合类型元素,但是此文档中唯一的属性包含于<DVD>元素中。 </p><p>通过指定名称和数据类型就可定义简单类型元素: </p><p> </p><p>XML模式推荐标准中列出了44条内建的简单数据类型,包括string、integer、float、decimal、data、time、ID和Boolean。在/TR/xmlschema-2/中可以了解更多关于这些数据类型的内容。也可以自己定义复杂数据类型。 </p><p><DVD>元素还包含一个属性id,它定义于子元素序列之后。所有的属性都是简单类型元素,并且除了特别指定外都是可选的: </p><p> </p><p>可以对属性值加上约束条件以限制元素的可能取值范围。 </p><p>图2-1在Altova XMLSpy中并列地显示了XML文档和模式。 </p><p> </p><p>图2-1 XML文档及其相关模式 </p><p>1.可选的布局 在上个例子中,只有<library>元素被定义为<xs:schema>元素的子元素,因而它是唯一具有全局性的元素。如果希望其他元素具有全局性,那么可以通过使用ref属性改变它们的定义方式。 </p><p>下面的代码是经过重写的模式文档,它使<DVD>元素成为全局性元素。 </p><p> </p><p> </p><p>可以在资源文件中找到保存为dvd_的文档。 </p><p>重写的模式文档变化不大。整个<DVD>元素的声明原先是被包含于<library>声明内部的,现在它是<xs:schema>元素的子元素了。这就意味着,任何其他的定义都可使用ref关键字访问这个声明。在上面的代码列表中,变化了的部分以粗体显示。在图2-2中可以看到XML文档及其可选的模式。 图2-2 XML文档及其可选的相关模式 </p><p>当同一个元素出现在多个地方时,创建这种模式文档的结构就很有用了。XML模式中没有文档实例中文档元素的概念,因此可以包含多个全局元素。不利之处是,有效性解析器可以接受任意一个元素作为文档元素。 </p><p>2.定义数据类型 </p><p>上面的XML模式样本只使用了XML模式推荐标准中的内建简单数据类型。也可以自己定义数据类型。例如,如果一个属性只能有yes或no值,那么自定义一个反映这种情况的数据类型或许有用: </p><p> </p><p>上述声明创建了一个名为YesNoType的简单类型元素。该元素基于xs:string数据类型并且有两个可选值:yes或no。 </p><p>一旦定义后,声明就可以使用内建数据类型同样的方式使用这个数据类型: </p><p> </p><p>如果需要将这个数据类型用于其他的模式,那么可以像在网站中使用服务器端包含文件那样包含样式。数据类型可以保存在一个模式文档中,并使用<xs:include>声明。 这个数据类型定义被保存于文件中。在模式文档中,可以使用下列声明来对它进行引用: </p><p> </p><p>和dvd_文件可以在下载的资源文件中找到。 </p><p>注解 引入的模式有时称为架构型模式,因为它的目的是提供作为文档有效性验证依据的文档模式的构造单元。 </p><p>3.模式结构 </p><p>前面介绍了创建模式的三种不同方法:在一个元素中声明所有的元素和属性(Russian doll),使用ref数据类型定义全局元素,以及定义自命名的数据类型。 </p><p>总地来说,如果只针对某个文档定义模式,Russian doll方法比较合适。如果创建的模式可能用于几个不同的文档实例,那么至少为其中的某些元素使用全局定义将会比较灵活方便。 </p><p>如果希望某个元素总是以同样的名字被引用,那就将它定义为一个元素。如果不同名字的元素有可能具有相同的结构时,就定义一个数据类型。 </p><p>举个例子,如果有个文档包含一个可能具有多种用途的地址,例如邮政地址、街道地址和投递地址。一种方法可能是在整个文档中重用<address>元素。然而,如果希望同样的元素结构具有不同的元素名称,那么定义一个全局性的address数据类型会更好,它可以用于<postalAddress>、<streetAddress>和<deliveryAddress>元素。 </p><p>4.模式和命名空间 </p><p>XML模式的主题非常丰富,可以用一整本书来进行讨论。但现在我们只讨论模式与命名空间的关系。 </p><p>定义一个模式时,可能也会定义一个其实例文档所在的命名空间。可以通过使用<xs:schema>中的targetNamespace属性来进行。如果这样做的话,任何在模式内对这些元素的引用都必须使用这个命名空间。这可避免将之定义为XML模式的默认命名空间所带来的麻烦。下面是一个例子: </p><p> </p><p>在这个例子中,elementFormDefault属性设置成了qualified,还将attributeFormDefault属性设置为unqualified。这些属性说明了本地定义的元素和属性是否在命名空间内有效。本地定义的元素是指在复合类型元素中定义的元素。 </p><p>将elementFormDefault属性设置为qualified并不意味着文档实例中的本地元素也是有效的。attributeFormDefault的设置确保属性被当成属于其包含元素所有的命名空间里的属性一样对待。这在XML中是默认的。 </p><p>5.将模式指定到文档 </p><p>在建立了模式文档后,需要从实例文档中对其加以引用,这样XML有效性解析器就可对文档进行有效性验证。这可以通过schemaLocation或noNamespaceSchemaLocation属性来指定。如果没有目标命名空间,就使用后一个属性。 </p><p>这些属性是W3C控制的命名空间的一部分,被称为XML模式实例命名空间。通常以前缀xsi进行引用。这需要在文档实例内部对命名空间进行声明。 </p><p>由于模式文档不在命名空间内部,因此使用noNamespaceSchemaLocation属性作为文档元素的例子: </p><p> </p><p>完整的文档保存为dvd_,可以在下载的文件中找到。 </p><p>注意xsi:noNamespaceSchemaLocation属性的语法。在本例中,该文档使用了一个对模式文档的本地引用,但它本可使用一个有效的URI来从互联网上寻找到模式文档。 如果使用了schemaLocation属性,那么其值将由一个命名空间URI加上该命名空间的XML模式文档的物理位置的URI组成。可以对文档元素进行重写使其引用一个命名空间: </p><p> </p><p>如上例所示,使用本地引用或是有效的URI都是可以的。值得注意的是,属性xsi:schemaLocation的值可以是任意数量的URI对,其第一部分是命名空间的URI,而第二部分是相关XML模式的位置。这使得一个文档实例可以被关联到多个XML模式文档。 </p><p>6.模式和实体声明 </p><p>DTD的一个优点在于,它们可提供一种定义个性化的实体引用的方法。如前所述,这在使用XML模式来声明XML词汇时是不行的。在使用XML模式时,如需要包括实体引用,那么也可以在文档实例中包含一个DTD。XML模式用于有效性验证,而DTD则用于声明实体引用: </p><p> </p><p>2.2.3 DTD与模式的比较 </p><p>前面已经介绍了DTD和XML模式是如何确定XML词汇的规则的。虽然这两种类型的文档都起着相同的作用,但它们之间还是有一些不同。下面对它们做一个比较: </p><p>l DTD和XML模式都可对XML文档的结构进行定义,以便通过一个有效性解析器来对文档进行检查; </p><p>l DTD中可以定义实体,而在XML模式中却不行; </p><p>l XML模式中可以为字符数据指定数据类型,而DTD不行; </p><p>l XML模式中可以定义个性化的数据类型,而DTD却不能; </p><p>l XML模式支持从一个数据类型中引申另一个数据类型,而DTD却不支持数据类型的引申; </p><p>l XML模式支持命名空间,而DTD却不支持命名空间; l XML模式提供<xsd:include>和<xsd:import>用于模块化开发,而DTD却没有提供相应的功能; </p><p>l XML模式使用XML标记语法,因而可以使用标准XML处理工具创建和修改它们而DTD并不遵循XML词汇的构造规则; </p><p>l 由于DTD的语法简练,因而其文档较小。XML模式的语法通常不够简练,因而产生的文件较大; </p><p>l XML模式语言比DTD规范更新,它弥补了DTD的一些不足之处。 </p><p>DTD和XML模式是很多模式语言中的两种。在某些情况下,也许需要考虑使用其他类型的模式。 </p><p>2.2.4 其他模式类型 </p><p>DTD和XML模式都属于封闭模式语言。也就是说,它们禁止所有模式中没有明确允许的东西。XML模式语言提供了一些扩展性,但它基本上还是属于封闭语言。 </p><p>其他一些模式语言是开放的,它们允许出现模式没有明确禁止的内容。这些语言可以用于替代DTD和XML模式,也可以作为它们的补充。对它们的处理是在对封闭语言处理后进行的。 </p><p>如果需要构造一个约束规则,而它在DTD或XML模式中却是无法实现的,可能就需要使用另一种模式类型。例如,某税务系统可能会有如下规则:“如果性别值为男性,就不能存在产科费用这个元素。”应用程序中经常会存在这样的业务规则,另一种不同的模式类型可能更容易描述这样的约束。 </p><p>这些可选的模式语言包括: </p><p>l Schematron:/xml/resource/schematron/; </p><p>l REgular LAnguage for XML Next Generation(RELAX NG):/ committees/tc_?wg_abbrev=relax-ng; </p><p>l XML-Data Reduced(XDR):/~ht/。 </p><p>Schematron使用XSLT和XPath,因而可以将Schematron声明嵌入到XML模式文件内部以扩展它的应用范围。本章的“理解XSLT”和“XPath”部分将会对XSLT和XPath做更多的介绍。 </p><p>目前使用的XML词汇还有很多种,下一节会介绍几种常用的词汇。 2.2.5 XML词汇 </p><p>本章已经介绍了如何使用DTD或XML来定义XML词汇。很多XML词汇已经成为工业标准,因此在定义自己的语言之前,应该清楚有哪些词汇。 </p><p>我们已经接触了一些XML词汇,如XHTML和XML模式,第3章还会有更详细的介绍。表2-2列出了一些常用的XML词汇。 </p><p>表2-2 常用XML词汇 </p><p>XML语言 </p><p>用 </p><p>途 </p><p>参 考 </p><p>ADM提供/architecture/adml/ </p><p>L(建建筑信adml_ </p><p>筑描息的互述标操作性 </p><p>记 </p><p>语言) </p><p>CML(化学标记语言) </p><p>覆盖了从大分子化合物序列到无机分子和最子化学 </p><p>允许数据图片、订单和商业信息的传输 </p><p>允许企业通过互联网开展业务 </p><p>用于天文数据的XML规范,如图像、/ </p><p>CPXe(通用图片交换环境) </p><p>ebXML(电子商务XML) </p><p>FITSML(灵活图像传输 </p><p>/i_ </p><p>/ </p><p>/xml/articles/ 系统光谱、标记表格和语言) 天体图等 </p><p>oBI允许X(开企业应放式用程序建筑与建筑物信物内的息 机械和交换) 电子系统进行通信 </p><p>Mat描述hML数学 </p><p>(数学标记语言) </p><p>mpX用于ML(肉在肉类类和和畜禽畜禽供应链XML) 中交换业务信息 </p><p>MDD用于L(市股票市场数场信息据定的共享 </p><p>义 </p><p>语言) </p><p>SMI协调L(同多媒体步多在网站媒体上的显集成 示 </p><p>语言) </p><p>SVG描述(可矢量图扩展形 </p><p>矢量图形) </p><p>/committees/tc_?wg_abbrev=obix </p><p>/Math/ </p><p>/about/ </p><p>/ </p><p>/smil/ </p><p>/TR/SVG/ XBRL(可扩展业务报告 </p><p>语言) </p><p>用于业务和财务数据的电子通信 </p><p>/Home/ </p><p>在接触了一些XML词汇的实例之后,应该了解一下如何显示XML文档中的内容。 </p><p> </p><p>2.3 显示XML </p><p>有些情况下,需要将XML文档的内容可视化地展现出来。它们可能需要显示在Web浏览器中或者被打印出来。在DVD的例子中,可能还需要对显示方式进行调整以使得标题都排列在一行中。甚至文档还需要按标题字母或类别排序。 </p><p>本节将介绍XML文档的显示技术:CSS和XSLT。 </p><p>2.3.1 XML和CSS </p><p>CSS可以按照与应用于XHTML相同的方式应用于XML。也就是说,如果已经知道如何在XHTML中使用CSS,那么同样的技术也可以应用于XML。第5章会更详细地介绍CSS和XML,本节只是描述其中的一些要点。 </p><p>用CSS显示XML文档时,需要为每个XML元素名称指定一个样式,就像在XHTML中一样。在XML中唯一的差别就是:样式表是通过处理指令关联到XML文档中的,而处理指令是紧跟在XML声明之后出现的: </p><p> </p><p>在XHTML页面中,需要添加样式的是字符数据。而在XML中可能并不是这种情况。例如,内容中可能包含人所不容易直观理解的数字。若使用CSS,则在呈现XML文档时并不容易为之添加说明性文本。当处理仅包含文本的文档时,这种局限并不十分重要,但是在处理其他类型的内容时却是值得考虑的大问题。 CSS的另一个局限性就是:它几乎是按照元素在XML文档中出现的顺序来呈现它们的。对内容进行重新排序、分类或过滤都超出了CSS的范畴。在显示XML时,可能需要更灵活地确定数据的显示方式,而这可以通过使用XSL来完成。 </p><p>2.3.2 XSL </p><p>XSL(可扩展样式表语言)分为两个部分:XSLT(XSL转换)和XSL-FO(XSL格式对象)。前者将XML源文档树转换成结果树,也许是XHTML树。而后者为之加上格式,通常是为了打印输出。图2-3显示了这两个过程是如何结合的。 </p><p> </p><p>图2-3 对XML文档应用转换和格式 </p><p>当XSLT处理器将XML文档读入内存时,它被称为源树。处理器应用样式表中的模板对源树中的节点进行转换。这个过程产生结果节点,这些节点一起形成结果树。 </p><p>结果树也是一个XML文档,它还可以被转换成其他类型的输出。转换的过程称为序列化。如前所述,结果树通常被序列化为XHTML。通过使用XSL-FO还可从结果树中产生打印输出。 </p><p>现在人们提到XSL时,通常指的是XSLT。XSL-FO可以被用来产生打印输出、PDF文件或者听觉输出。 </p><p>1.理解XSLT </p><p>第6章和第7章会更加详细地介绍XSLT,这里只是通过一个简单的例子说明XSLT的功能。下面大家将会看到如何使用XSLT将DVD文档转换成包含CSS样式的XHTML页面。这个过程与将在第5章介绍的直接使用CSS为XML内容添加样式不同。 前面讲述了CSS使用推模式对源文档添加样式,也就是输入的结构决定了输出的结构。XSLT允许推模式,也允许拉模式,即样式表的结构决定输出的结构。 </p><p>大家在本例中可以见到两种模式的应用,本例会说明如何使用源文档来定义显示顺序,同时使用样式表提供结构信息。本例将在XHTML页面中创建一个显示所有DVD的列表,并且添加一些CSS样式以增强显示效果。本实例中使用的文件名为和,它们都保存在Apress网站()源代码区中本章的ZIP文件下。 </p><p>图2-4显示了由XSLT样式表产生的网页。 </p><p>这个网页是对源XML文档应用以下样式表页产生的: </p><p> </p><p> </p><p> </p><p>这个样式表以一个样式表声明开始。它使用xsl前缀表示XSLT的命名空间,这个命名空间是在文档元素<stylesheet>里声明的。它还需要声明所使用的XSLT的版本,在此例中是1.0: 接着,样式表声明了输出类型,在此例中是HTML 4.0: </p><p> </p><p>还需要选择输出方法,是xml还是text。如果选择xml类型,就可以产生合式的XML或XHTML。如果希望产生一个逗号分隔的文件以输入到表格软件或数据库中,则可以选择text类型。 </p><p>下面,该样式表使用一个模板来生成<html>、<head>和<body>开始标签。为了简化该例,此处省略了DOCTYPE声明: </p><p> </p><p>第一行确定了模板匹配到源树中的节点。这里使用了一个XPath表达式表示这个节点。本章稍后会对XPath做进一步的介绍。在本例中匹配的是根节点,由一个斜杠(/)表示。 </p><p>注解 从技术上来说,根节点并不等同于根元素。根节点在文档中比根元素要高一级,根元素是它的一个子元素。这使得样式表不仅可以访问元素中的信息,也可以访问到序言和结语中的信息。 </p><p>这个模板规定了当XSLT处理器遇到根的时候进行什么样的处理。在本例中,结果树包含了模板中定义了的HTML标签,它应该产生如下的输出: 结果树建立起一个HTML文档并添加了一个指向外部CSS样式表的链接。<table>和<body>的结束标签出现在它包含的其他内容的后面。 </p><p>样式表的下一部分使用了另一个模板,它将每个<DVD>元素显示为表中的一行。这时该模板与每个<DVD>元素匹配。因为有多个DVD元素,所以最好使用一个xsl:for-each声明: </p><p> </p><p>声明xsl:for-each使用XPath表达式/library/DVD找到所有的<DVD>节点。也就是说,从根节点开始,找到<library>元素,并移动到<DVD>节点。这个声明获得的是XML文档中所有的<DVD>节点。 </p><p>第二个声明表示的是如何使用xsl:sort声明对一组节点进行排序。在本例中,样式表按照类别进行排序。因为模板引用的是/library/DVD路径,所以最好使用相对路径来确定<genre>节点。 </p><p>在xsl:for-each声明内部,xsl:value-of元素选择一个特定的元素对表中的单元格进行总结。样式表重复三次,分别对<title>、<format>和<genre>元素进行声明。 </p><p>转换的结果就是产生了如下的结果树: </p><p>这个样式表中余下的部分添加了</table>、</body>和</html>这些结束标签: </p><p> </p><p>如果希望体验一下XSLT的强大功能,可以试着自己修改样式表来改变排序方式,也可以对内容进行过滤以显示特定的记录。这些都将在第6章和第7章中介绍。 </p><p>2.XSLT小结 </p><p>本节介绍了XSLT的一些功能,以下要点是需要牢记的: </p><p>l CSS根据文档树的当前结构对XML文档添加样式。这种形式称为推模型; </p><p>l XSLT可以将源XML文档转换成可序列化为XML、HTML或文本的任意合式的XML文档; </p><p>l XSLT样式表可以产生与源树顺序不同的结果树; </p><p>l XSLT可以在转换的过程中添加文本和标记; l XSLT是基于模板的,因此它主要是声明性语言; </p><p>l XSLT可以进一步应用XPath定位源树中的节点。 </p><p>这里讨论XSLT时涉及了XPath,因此有必要对之稍微详细地予以进一步讨论。 </p><p> </p><p>2.4 XPath </p><p>前面提到,XSLT样式表在定位源XML文档树的特定部分时很大程度上要依赖于XPath的使用。一些其他的推荐标准,如XPointer,也依赖于XPath规范,因此有必要先对其进行基本的了解。重要的一点是,XPath并不使用XML规则来构造表达式。 </p><p>使用XPath时要根据XML文档树编写相应的表达式。对一个文档使用XPath会得到以下几种结果: </p><p>l 一个单独的节点; </p><p>l 一组节点; </p><p>l 一个布尔值; </p><p>l 一个浮点数; </p><p>l 一个字符串。 </p><p>XPath表达式不能在文档中定位XML声明,因为XML声明不是文档树的一部分。它们也不能定位嵌入的DTD声明或CDATA块。 </p><p>XPath将XML文档看作由节点构成的层次树。每棵树包括: </p><p>l 元素节点; </p><p>l 属性节点; </p><p>l 文本节点; </p><p>l 处理指令; </p><p>l 注释; </p><p>l 命名空间。 </p><p>根节点是XML文档树的起始点,并且在XML文档中只有一个根节点。XML文档本身就是树中的一个节点,它也是根节点的一个子节点。根节点还包括位于文</p><p><p></p></img></p><div class=entry-copyright><p> 发布者:admin,转转请注明出处:<span>http://www.yc00.com/web/1690510710a361594.html</span></p></div></div><div class=entry-tag><a href="/tag/127122.html" rel=tag>prolog</a></div><div class=entry-bar><div class="linxie7ede2-1841entry-bar-inner clearfix"><div class="linxie7ede2-1841author pull-left"><a target=_blank href="/user/1.html" class="avatar"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span class=author-name>admin</span></a></div><div class="linxie7ede2-1841info pull-right"><div class="linxie7ede2-1841info-item meta"><a class=meta-item href=#comments><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i><span class=data>0</span></a></div><div class="linxie7ede2-1841info-item share"><a class="meta-item wechat" data-share=wechat target=_blank rel=nofollow href=#><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-wechat></use></svg></i></a><a class="meta-item weibo" data-share=weibo target=_blank rel=nofollow href=#><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-weibo></use></svg></i></a><a class="meta-item qq" data-share=qq target=_blank rel=nofollow href=#><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-qq></use></svg></i></a><a class="meta-item qzone" data-share=qzone target=_blank rel=nofollow href=#><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-qzone></use></svg></i></a></div><div class="linxie7ede2-1841info-item act"><a href=javascript:; id=j-reading><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-article></use></svg></i></a></div></div></div></div></div><div class=entry-related-posts><h3 class="entry-related-title">相关推荐</h3><ul class="entry-related cols-3 post-loop post-loop-default"><li class="item "><div class=item-img><a class=item-img-inner href="/news/1690510768a361600.html" title="人工智能技术在农业生产方面的应用" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="人工智能技术在农业生产方面的应用" decoding=async data-original="/uploads/image/0837.jpg"></a><a class=item-category href="/news" target=_blank>建站资讯</a></div><div class=item-content><h2 class="item-title"><a href="/news/1690510768a361600.html" target=_blank rel=bookmark>人工智能技术在农业生产方面的应用</a></h2><div class=item-excerpt><p>人工智能技术在农业生产方面的应用</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>35</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/news/1690511004a361621.html" title="c语言编程工具的总结" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="c语言编程工具的总结" decoding=async data-original="/uploads/image/0139.jpg"></a><a class=item-category href="/news" target=_blank>建站资讯</a></div><div class=item-content><h2 class="item-title"><a href="/news/1690511004a361621.html" target=_blank rel=bookmark>c语言编程工具的总结</a></h2><div class=item-excerpt><p>c语言编程工具的总结</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>34</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/web/1690511130a361635.html" title="PE文件解析-异常处理表与数字签名" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="PE文件解析-异常处理表与数字签名" decoding=async data-original="/uploads/image/0149.jpg"></a><a class=item-category href="/web" target=_blank>网站建设</a></div><div class=item-content><h2 class="item-title"><a href="/web/1690511130a361635.html" target=_blank rel=bookmark>PE文件解析-异常处理表与数字签名</a></h2><div class=item-excerpt><p>PE文件解析-异常处理表与数字签名</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>34</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/news/1690511526a361694.html" title="华师大软件学院历年培养研究报告生学位论文情况" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="华师大软件学院历年培养研究报告生学位论文情况" decoding=async data-original="/uploads/image/0208.jpg"></a><a class=item-category href="/news" target=_blank>建站资讯</a></div><div class=item-content><h2 class="item-title"><a href="/news/1690511526a361694.html" target=_blank rel=bookmark>华师大软件学院历年培养研究报告生学位论文情况</a></h2><div class=item-excerpt><p>华师大软件学院历年培养研究报告生学位论文情况</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>41</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/xiaochengxu/1690511855a361739.html" title="中国农业大学远程教育---软件工程" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="中国农业大学远程教育---软件工程" decoding=async data-original="/uploads/image/0159.jpg"></a><a class=item-category href="/xiaochengxu" target=_blank>小程序</a></div><div class=item-content><h2 class="item-title"><a href="/xiaochengxu/1690511855a361739.html" target=_blank rel=bookmark>中国农业大学远程教育---软件工程</a></h2><div class=item-excerpt><p>中国农业大学远程教育---软件工程</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>34</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/news/1690511902a361747.html" title="历年计算机二级Java考试试题及答案(完整版)" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="历年计算机二级Java考试试题及答案(完整版)" decoding=async data-original="/uploads/image/0795.jpg"></a><a class=item-category href="/news" target=_blank>建站资讯</a></div><div class=item-content><h2 class="item-title"><a href="/news/1690511902a361747.html" target=_blank rel=bookmark>历年计算机二级Java考试试题及答案(完整版)</a></h2><div class=item-excerpt><p>历年计算机二级Java考试试题及答案(完整版)</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>29</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/xiaochengxu/1690512010a361762.html" title="硕磐智能笔试题" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="硕磐智能笔试题" decoding=async data-original="/uploads/image/0884.jpg"></a><a class=item-category href="/xiaochengxu" target=_blank>小程序</a></div><div class=item-content><h2 class="item-title"><a href="/xiaochengxu/1690512010a361762.html" target=_blank rel=bookmark>硕磐智能笔试题</a></h2><div class=item-excerpt><p>硕磐智能笔试题</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>32</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/xiaochengxu/1690512081a361773.html" title="计算机程序设计语言的发展历程" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="计算机程序设计语言的发展历程" decoding=async data-original="/uploads/image/0116.jpg"></a><a class=item-category href="/xiaochengxu" target=_blank>小程序</a></div><div class=item-content><h2 class="item-title"><a href="/xiaochengxu/1690512081a361773.html" target=_blank rel=bookmark>计算机程序设计语言的发展历程</a></h2><div class=item-excerpt><p>计算机程序设计语言的发展历程</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>58</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/news/1690512238a361795.html" title="1程序设计语言的特性主要有心理特性" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="1程序设计语言的特性主要有心理特性" decoding=async data-original="/uploads/image/0386.jpg"></a><a class=item-category href="/news" target=_blank>建站资讯</a></div><div class=item-content><h2 class="item-title"><a href="/news/1690512238a361795.html" target=_blank rel=bookmark>1程序设计语言的特性主要有心理特性</a></h2><div class=item-excerpt><p>1程序设计语言的特性主要有心理特性</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>31</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/web/1690512302a361806.html" title="药房自动化资料整理" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="药房自动化资料整理" decoding=async data-original="/uploads/image/0259.jpg"></a><a class=item-category href="/web" target=_blank>网站建设</a></div><div class=item-content><h2 class="item-title"><a href="/web/1690512302a361806.html" target=_blank rel=bookmark>药房自动化资料整理</a></h2><div class=item-excerpt><p>药房自动化资料整理</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>26</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/web/1690512883a361882.html" title="[考试]《web技术导论》测试答案" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="[考试]《web技术导论》测试答案" decoding=async data-original="/uploads/image/0960.jpg"></a><a class=item-category href="/web" target=_blank>网站建设</a></div><div class=item-content><h2 class="item-title"><a href="/web/1690512883a361882.html" target=_blank rel=bookmark>[考试]《web技术导论》测试答案</a></h2><div class=item-excerpt><p>[考试]《web技术导论》测试答案</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>33</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/xiaochengxu/1690513810a361936.html" title="开发人员能力矩阵" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="开发人员能力矩阵" decoding=async data-original="/uploads/image/0578.jpg"></a><a class=item-category href="/xiaochengxu" target=_blank>小程序</a></div><div class=item-content><h2 class="item-title"><a href="/xiaochengxu/1690513810a361936.html" target=_blank rel=bookmark>开发人员能力矩阵</a></h2><div class=item-excerpt><p>开发人员能力矩阵</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>32</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/news/1690514056a361955.html" title="程序设计方法和程序分析" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="程序设计方法和程序分析" decoding=async data-original="/uploads/image/0861.jpg"></a><a class=item-category href="/news" target=_blank>建站资讯</a></div><div class=item-content><h2 class="item-title"><a href="/news/1690514056a361955.html" target=_blank rel=bookmark>程序设计方法和程序分析</a></h2><div class=item-excerpt><p>程序设计方法和程序分析</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>27</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/news/1690514324a361973.html" title="dom4j解析xml文件时忽略DOCTYPE标签" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="dom4j解析xml文件时忽略DOCTYPE标签" decoding=async data-original="/uploads/image/0668.jpg"></a><a class=item-category href="/news" target=_blank>建站资讯</a></div><div class=item-content><h2 class="item-title"><a href="/news/1690514324a361973.html" target=_blank rel=bookmark>dom4j解析xml文件时忽略DOCTYPE标签</a></h2><div class=item-excerpt><p>dom4j解析xml文件时忽略DOCTYPE标签</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>49</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/web/1690515614a362086.html" title="软件开发技术考试复习题及参考答案" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="软件开发技术考试复习题及参考答案" decoding=async data-original="/uploads/image/0707.jpg"></a><a class=item-category href="/web" target=_blank>网站建设</a></div><div class=item-content><h2 class="item-title"><a href="/web/1690515614a362086.html" target=_blank rel=bookmark>软件开发技术考试复习题及参考答案</a></h2><div class=item-excerpt><p>软件开发技术考试复习题及参考答案</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>314</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/xiaochengxu/1690516435a362154.html" title="专业综合能力实训报告" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="专业综合能力实训报告" decoding=async data-original="/uploads/image/0435.jpg"></a><a class=item-category href="/xiaochengxu" target=_blank>小程序</a></div><div class=item-content><h2 class="item-title"><a href="/xiaochengxu/1690516435a362154.html" target=_blank rel=bookmark>专业综合能力实训报告</a></h2><div class=item-excerpt><p>专业综合能力实训报告</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>38</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/web/1690516958a362187.html" title="DSS决策支持系统概述" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="DSS决策支持系统概述" decoding=async data-original="/uploads/image/0357.jpg"></a><a class=item-category href="/web" target=_blank>网站建设</a></div><div class=item-content><h2 class="item-title"><a href="/web/1690516958a362187.html" target=_blank rel=bookmark>DSS决策支持系统概述</a></h2><div class=item-excerpt><p>DSS决策支持系统概述</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>21</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/web/1690518022a362265.html" title="西南大学网络教育[0753]《建筑结构CAD》作业答案" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="西南大学网络教育[0753]《建筑结构CAD》作业答案" decoding=async data-original="/uploads/image/0978.jpg"></a><a class=item-category href="/web" target=_blank>网站建设</a></div><div class=item-content><h2 class="item-title"><a href="/web/1690518022a362265.html" target=_blank rel=bookmark>西南大学网络教育[0753]《建筑结构CAD》作业答案</a></h2><div class=item-excerpt><p>西南大学网络教育[0753]《建筑结构CAD》作业答案</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>35</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/xiaochengxu/1690518260a362286.html" title="中学信息技术人工智能教学大纲" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="中学信息技术人工智能教学大纲" decoding=async data-original="/uploads/image/0761.jpg"></a><a class=item-category href="/xiaochengxu" target=_blank>小程序</a></div><div class=item-content><h2 class="item-title"><a href="/xiaochengxu/1690518260a362286.html" target=_blank rel=bookmark>中学信息技术人工智能教学大纲</a></h2><div class=item-excerpt><p>中学信息技术人工智能教学大纲</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>28</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><li class="item "><div class=item-img><a class=item-img-inner href="/xiaochengxu/1690518370a362294.html" title="python人工智能算法的方式_Python与人工智能" target="_blank"><img width=480 height=300 src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="python人工智能算法的方式_Python与人工智能" decoding=async data-original="/uploads/image/0389.jpg"></a><a class=item-category href="/xiaochengxu" target=_blank>小程序</a></div><div class=item-content><h2 class="item-title"><a href="/xiaochengxu/1690518370a362294.html" target=_blank rel=bookmark>python人工智能算法的方式_Python与人工智能</a></h2><div class=item-excerpt><p>python人工智能算法的方式_Python与人工智能</p></div><div class=item-meta><div class="item-meta-li author"><a target=_blank href="/user/1.html" class="avatar j-user-card"><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-60 photo' height=60 width=60><span>admin</span></a></div><span class="item-meta-li date">2023-7-28</span><div class=item-meta-right><span class="item-meta-li views" title="阅读数"><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-eye></use></svg></i>35</span><span class="item-meta-li comments" title=评论数><i class="wpcom-icon wi"><svg aria-hidden=true><use xlink:href=#wi-comment></use></svg></i>0</span></div></div></div></li><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src ="https://hm.baidu.com/hm.js?f186ba0b24e70e8971256f6532580d33"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </ul></div><div id=comments class=entry-comments><div id="respond" class="comment-respond"><h3 id="reply-title" class="comment-reply-title">发表回复<small><a rel="nofollow" id="cancel-comment-reply-link" href="/justnews/353.html#respond" style="display:none;"><i class="wpcom-icon wi"><svg aria-hidden="true"><use xlink:href="#wi-close"></use></svg></i></a></small></h3><form action="/comment/create/361594.html?safe_token=ks7iFuVzVlpt_2BcXUxTf3x1k49GryPZAMNqzAYz_2BAmhE9ETiA8UlBD2wRr9ejEc_2FknlXkAns7vY5UX5P6y8nM3A_3D_3D" method="post" id="commentform" class="comment-form"><div class="linxie7ede2-1841comment-form-comment"><textarea id="comment" name="message" class="required" rows="4" placeholder="写下你的评论…"></textarea></div><div class="linxie7ede2-1841form-submit"><button name="submit" type="submit" id="submit" class="btn btn-primary btn-xs submit">提交</button><input type="hidden" name="doctype" value="1" /><input type="hidden" name="quotepid" value="0" /></div></form></div><h3 class="comments-title">评论列表(0条)</h3><ul class=comments-list><li class="sn-empty">暂无评论</li></ul></div></article></main><aside class=sidebar><div class="linxie7ede2-1841widget widget_profile"><div class=profile-cover><img src="/view/template/justnews/img/avatar_bg.jpg" alt="admin"></div><div class=avatar-wrap><a target=_blank href="/user/1.html" class=avatar-link><img alt="admin" src="/upload/avatar/000/1.png?1687492101" class='avatar avatar-120 photo' height=120 width=120></a></div><div class=profile-info><a target=_blank href="/user/1.html" class=profile-name><span class=author-name>admin</span><span class=user-group>管理员组</span></a><p class=author-description>Enjoy coding, enjoy life!</p><div class=profile-stats><div class=profile-stats-inner><div class=user-stats-item><b>2868823</b><span>文章</span></div><div class=user-stats-item><b>0</b><span>评论</span></div></div></div></div><div class=profile-posts><h3 class="widget-title"><span>最近文章</span></h3><ul><li><a href="/news/1726813566a3547961.html" title="python re库用法">python re库用法</a></li><li><a href="/news/1726642346a3546263.html" title="VBA列表和下拉菜单的设计和应用">VBA列表和下拉菜单的设计和应用</a></li><li><a href="/xiaochengxu/1691040819a493072.html" title="使用多项式函数进行拟合">使用多项式函数进行拟合</a></li><li><a href="/xiaochengxu/1691040665a493033.html" title="分段多项式拟合">分段多项式拟合</a></li><li><a href="/web/1755564226a5243298.html" title="【WIN10】清除图标缓存">【WIN10】清除图标缓存</a></li><li><a href="/web/1755562607a5243079.html" title="win10 无法删除 注册表 蓝牙_编辑设置Win10删除蓝牙设备后无法重新添加的修复办法...">win10 无法删除 注册表 蓝牙_编辑设置Win10删除蓝牙设备后无法重新添加的修复办法...</a></li><li><a href="/num/1725041053a3519634.html" title="如何在CAD图纸一个布局里头的几十张图纸实现快速打印">如何在CAD图纸一个布局里头的几十张图纸实现快速打印</a></li><li><a href="/num/1725041052a3519633.html" title="肿么将多张CAD图形打印成一张PDF">肿么将多张CAD图形打印成一张PDF</a></li><li><a href="/xitong/1716142309a2726173.html" title="订货会设备准备组工作流程">订货会设备准备组工作流程</a></li><li><a href="/xitong/1716142255a2726168.html" title="的粤语怎么写">的粤语怎么写</a></li><li><a href="/questions/1749257988a4819086.html" title="Omit specific product categories from WooCommerce shortcode">Omit specific product categories from WooCommerce shortcode</a></li><li><a href="/questions/1749257922a4819075.html" title="Updating Posts table in database without overwriting user generated content">Updating Posts table in database without overwriting user generated content</a></li></ul></div></div><div class="linxie7ede2-1841widget widget_post_hot"><h3 class="widget-title"><span>热门文章</span></h3><ul><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1754949463a5219714.html" title="SpringBoot游戏社区服务端 毕业设计程序源码09220"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="SpringBoot游戏社区服务端 毕业设计程序源码09220" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1754949463a5219714.html" title="SpringBoot游戏社区服务端 毕业设计程序源码09220">SpringBoot游戏社区服务端 毕业设计程序源码09220</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1754956431a5221210.html" title="探索C++的string:从基础到深入"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="探索C++的string:从基础到深入" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1754956431a5221210.html" title="探索C++的string:从基础到深入">探索C++的string:从基础到深入</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1754956675a5221266.html" title="Win11怎么绕过BitLocker加密"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="Win11怎么绕过BitLocker加密" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1754956675a5221266.html" title="Win11怎么绕过BitLocker加密">Win11怎么绕过BitLocker加密</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1754978734a5223760.html" title="es语法 rest api 模拟query 根据中文姓名搜索demo"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="es语法 rest api 模拟query 根据中文姓名搜索demo" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1754978734a5223760.html" title="es语法 rest api 模拟query 根据中文姓名搜索demo">es语法 rest api 模拟query 根据中文姓名搜索demo</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1754983507a5224011.html" title="Java8 多线程及并行计算demo"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="Java8 多线程及并行计算demo" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1754983507a5224011.html" title="Java8 多线程及并行计算demo">Java8 多线程及并行计算demo</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1755017181a5226577.html" title="【机器学习】探索GRU:深度学习中门控循环单元的魅力"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="【机器学习】探索GRU:深度学习中门控循环单元的魅力" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1755017181a5226577.html" title="【机器学习】探索GRU:深度学习中门控循环单元的魅力">【机器学习】探索GRU:深度学习中门控循环单元的魅力</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1755036426a5230422.html" title="【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1755036426a5230422.html" title="【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通">【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1755038982a5230980.html" title="windows10安装oracle 11g(文末附安装包)"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="windows10安装oracle 11g(文末附安装包)" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1755038982a5230980.html" title="windows10安装oracle 11g(文末附安装包)">windows10安装oracle 11g(文末附安装包)</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1755048696a5233115.html" title="idea配置Project Structure及Tomcat并支持热部署"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="idea配置Project Structure及Tomcat并支持热部署" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1755048696a5233115.html" title="idea配置Project Structure及Tomcat并支持热部署">idea配置Project Structure及Tomcat并支持热部署</a></p></div></li><li class="item"><div class="linxie7ede2-1841item-img"><a class="item-img-inner" href="/web/1755059645a5234299.html" title="Python Numpy数组高级索引操作指南"><img width="480" height="300" src="/view/template/justnews/img/lazy-480x300.png" class="attachment-default size-default wp-post-image j-lazy" alt="Python Numpy数组高级索引操作指南" decoding="async" data-original="/view/img/nopic.png"></a></div><div class="linxie7ede2-1841item-content"><p class="item-title"><a href="/web/1755059645a5234299.html" title="Python Numpy数组高级索引操作指南">Python Numpy数组高级索引操作指南</a></p></div></li></ul></div></aside></div></div><footer class="footer"><div class="container"><div class="footer-col-wrap footer-with-logo-icon"><div class="footer-col footer-col-logo"><img src="/view/template/justnews/img/logo-footer.png" alt="江阴网站建设,江阴网站制作,江阴网站设计,江阴SEO优化,江阴小程序开发-江阴雨辰互联"></div><div class="footer-col footer-col-copy"><ul class="footer-nav hidden-xs"><li id=menu-item-152 class="menu-item menu-item-152"><a href="/lianxi/1145089.html">联系我们</a></li><li id=menu-item-130 class="menu-item menu-item-130"><a href="#">行业动态</a></li><li id=menu-item-157 class="menu-item menu-item-157"><a href="#">专题列表</a></li><li id=menu-item-129 class="menu-item menu-item-129"><a href="#">用户列表</a></li><li id=menu-item-4252 class="menu-item menu-item-4252"><a href="#">网址导航</a></li></ul><div class="copyright"><p> CopyRight © 2022 All Rights Reserved. Powered by <a href="/">江阴网站建设,江阴网站制作,江阴网站设计,江阴SEO优化,江阴小程序开发-江阴雨辰互联</a></p><p><a target="_blank" rel="nofollow" href="https://beian.miit.gov.cn/" style="font-size: 12px;">豫ICP备2021025688号-30</a>| <p><a href="https://www.fzithome.com/xitong/">福州电脑网</a></p></p></div></div><div class="footer-col footer-col-sns"><div class=footer-sns><a class=sns-wx href=javascript:; aria-label=icon><i class="wpcom-icon fa fa-apple sns-icon"></i><span style="background-image:url('/view/template/justnews/img/qrcode.jpg');"></span></a><a class=sns-wx href=javascript:; aria-label=icon><i class="wpcom-icon fa fa-android sns-icon"></i><span style="background-image:url('/view/template/justnews/img/qrcode.jpg');"></span></a><a class=sns-wx href=javascript:; aria-label=icon><i class="wpcom-icon fa fa-weixin sns-icon"></i><span style="background-image:url('/view/template/justnews/img/qrcode.jpg');"></span></a><a href=/ target=_blank rel=nofollow aria-label=icon><i class="wpcom-icon fa fa-weibo sns-icon"></i></a></div></div></div></div></footer><div class="action action-style-0 action-color-1 action-pos-1" style=bottom:120px;><div class=action-item><i class="wpcom-icon fa fa-comments action-item-icon"></i><div class="action-item-inner action-item-type-2"><h3 style="text-align: center;">联系我们</h3><h5 style="text-align: center;"><span style="color: #2d6ded; font-size: 24px; line-height: 2;"><strong>400-800-8888</strong></span></h5><p> 在线咨询: <a class="btn btn-primary btn-xs" href="http://wpa.qq.com/msgrd?uin=99999" target=_blank rel="noopener noreferrer"><i class="wpcom-icon fa fa-qq"></i> QQ交谈 </a></p><p>邮件:admin@example.com</p><p>工作时间:周一至周五,9:30-18:30,节假日休息</p></div></div><div class=action-item><i class="wpcom-icon fa fa-wechat action-item-icon"></i><div class="action-item-inner action-item-type-1"><img class=action-item-img src="/view/template/justnews/img/qrcode.jpg" alt=关注微信></div></div><div class="action-item j-share"><i class="wpcom-icon wi action-item-icon"><svg aria-hidden=true><use xlink:href=#wi-share></use></svg></i></div><div class="action-item gotop j-top"><i class="wpcom-icon wi action-item-icon"><svg aria-hidden=true><use xlink:href=#wi-arrow-up-2></use></svg></i></div></div><script> var _wpcom_js = { "slide_speed":"5000", "is_admin":"0", "video_height":"484", "fixed_sidebar":"1", "dark_style":"0", "user_card":"1" }; var _wpmx_js = {}; </script><script src="/view/template/justnews/js/bind.js?2.3.0"></script><script src="/view/template/justnews/js/chunk.js?2.3.0"></script><script src="/view/template/justnews/js/utils.js?2.3.0"></script><script>jQuery(function($) {setup_share(1);});</script></body></html>