XML (可扩展标记语言)

XML (可扩展标记语言)

一、 标记语言

    标记语言,是一种将文本(txt)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。

    当今广泛使用的标记语言是超文本标记语言(HyperText Markup Language,)HTML 和 可扩展标记语言(Extensible Markup Language)XML。标记语言广泛应用于网页和网络应用程序。

1、超文本标记语言 HTML

(1)写法格式:linklink
(2)关注数据的展示与用户体验
(3)标记是预定义、不可扩展的(如 表示超链接)

2、可扩展的标记语言 XML

(1)写法格式:同 html 样式
(2)仅关注数据本身
(3)标记可扩展,可自定义

xml 和 Html 语言是由同一种父语言 SGML(Standard Generalized Markup Language,标准通用标记语言)发展出来的两种语言。

    xml 由 html 发展而来,与 html 格式相似,但是比html 严格。

    XML 描述的是结构、内容和语义,它不描述页面元素的格式化。HTML 侧重于如何表现信息,内容描述与显示整合为一体。

    XML 中的每个元素名都是成对出现的,结束标签前加一个/



二、XML 作用

    XML 可以用于描述数据、存储数据、传输(交换)数据。XML 现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便,用户可以定义自己需要的标记。

1、存储、交换数据

    XML 只用元素和属性来描述数据,而不提供数据的显示方法,这使得 XML 具有能够运
行于不同系统平台之间和转换成不同格式目标文件。 用 XML 在应用程序和公司之间作数据交换,几个应用程序可以共享和解析同一个 XML 文件,不必使用传统的字符串解析或拆解过程。

2、配置

许多应用都将配置数据存储在各种文件里,如 SSH、Android。使用 XML 配置文件的应用程序能够方便地处理所需数据,不用像其它应用那样要经过重新编译才能修改和维护应用系统。xml 比 数据库占用的资源少,操作方便,用来存储简单的信息,现在主要用在程序的配置文件上(比如 web.xml)。现在有越来越多的设备也支持 XML 了。

三、XML 示例

用 XML 存储已注册用户的数据方式

1、方式 1
"1.0" encoding="UTF-8"?>


张三</name>
28</age>
</person>

李四</name>
30</age>
</person>
</people>
2、方式 2
"1.0" encoding="UTF-8"?>

"白晶晶" age="28"></person>
"至尊宝" age="300"></person>
</people>
用 xml 存储连续剧
"1.0" encoding="UTF-8"?>
<!-- 第一行是XML声明 -->
<!-- 这是XML处理指令的例子:处理指令以,以?>结束 -->
<!--,在本例中是xml> -->
<!-- 处理指令一定要顶格写,前面不能有任何空白 -->


"郑晓龙"</span>>芈月传<<span class="token operator">/</span>title>
<players>
<player>孙俪<<span class="token operator">/</span>player>
<player>刘涛<<span class="token operator">/</span>player>
<player>马苏<<span class="token operator">/</span>player>
<player>方中信<<span class="token operator">/</span>player>
<player>黄轩<<span class="token operator">/</span>player>
<player>高云翔<<span class="token operator">/</span>player>
<<span class="token operator">/</span>players>
<desc><<span class="token operator">!</span><span class="token namespace">[CDATA[战国时期,芈月是楚威王最宠爱的小公主,但<desc>在楚威王
死后生活一落千丈,母亲向氏被楚威后逐出宫,芈月和弟弟芈戎躲过了一次次灾难和危机。
芈月与楚公子黄歇青梅竹马,真心相爱,但被作为嫡公主芈姝的陪嫁媵侍远嫁秦国。芈姝当
上了秦国的王后,芈月不得已成为宠妃...]]</span>><<span class="token operator">/</span>desc>
<<span class="token operator">/</span>sitcom>
<sitcom>
<title director=<span class="token string">"郑晓龙"</span>>甄嬛传<<span class="token operator">/</span>title>
<players>
<player>孙俪<<span class="token operator">/</span>player>
<player>陈建斌<<span class="token operator">/</span>player>
<player>蔡少芬<<span class="token operator">/</span>player>
<player>蒋欣<<span class="token operator">/</span>player>
<player>李东学<<span class="token operator">/</span>player>
<<span class="token operator">/</span>players>
<<span class="token operator">/</span>sitcom>
<<span class="token operator">/</span>sitcoms>
</code></pre> 
  <p>    文档的后缀名是 xml,每个文档有且仅有一个根元素,所谓根元素就是包含了其他所有元素的元素。XML 目前只有一个版本,即 1.0.XML 是自描述数据,使用现有的国际标准。</p> 
  <p>    XML 中有格式良好(Well-formed)的 XML 和有效的(validate)XML。</p> 
  <br> 
  <br> 
  <h3><font color="blue">四、格式良好的 xml<br></font></h3> 
  <h5>1、语法规范:</h5> 
  <h6>1)、必须有 XML 文档声明:</h6> 
  <p><a href="http://img.e-com-net.com/image/info8/54a6084936ae4a9597ed389dcf60802b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/54a6084936ae4a9597ed389dcf60802b.jpg" alt="XML (可扩展标记语言)_第1张图片" width="650" height="105" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/4878b2a5cfa9492f96e913769b03f3c7.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4878b2a5cfa9492f96e913769b03f3c7.jpg" alt="XML (可扩展标记语言)_第2张图片" width="650" height="224" style="border:1px solid black;"></a></p> 
  <p><strong>说明:</strong><br>     XML standalone 定义了外部定义的 DTD 文件的存在性. standalone element 有效值是 yes 和 no. 如下是一个例子:</p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span> standalone=<span class="token string">"no"</span>?>
<<span class="token operator">!</span>DOCTYPE s1 PUBLIC <span class="token string">"http://www.ibm.com/example.dtd"</span> <span class="token string">"example.dtd"</span>>
<s1><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><<span class="token operator">/</span>s1>
</code></pre> 
  <p>    值 no 表示这个 XML 文档不是独立的而是依赖于外部所定义的一个 DTD. 值 yes 表示这个 XML 文档是自包含的(self-contained).</p> 
  <p>    注意文本文件保存时候默认的编码格式是ANSI,需用记事本把它手动改为UTF-8保存。</p> 
  <h6>2)、必须有且仅有一个根元素</h6> 
  <h6>3)、严格区分大小写</h6> 
  <h6>4)、属性值用引号(双引号或单引号) :</h6> 
  <p>    等号分开的名称-值对;在一个元素上,相同的属性只能出现一次</p> 
  <h6>5)、标记成对;</h6> 
  <h6>6)、空标记关闭;</h6> 
  <h6>7)、元素正确嵌套。</h6> 
  <br> 
  <h5>2、元素命名规则</h5> 
  <h6>1)、名称中可以包含字母、数字或者其他可见字符;</h6> 
  <h6>2)、名称不能以数字开头;</h6> 
  <h6>3)、不能以 XML/xml/Xml…开头;</h6> 
  <h6>4)、名称中不能含空格;</h6> 
  <h6>5)、名称中不能含冒号(注:冒号留给命名空间使用)</h6> 
  <br> 
  <h5>3、实体</h5> 
  <p>    实体叫 ENTITY,实体的作用是避免重复输入。作用相当于宏或者变量。</p> 
  <h6>1)内置的 5 种实体</h6> 
  <table> 
   <thead> 
    <tr> 
     <th>实体</th> 
     <th>符号</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td><code><</code></td> 
     <td><</td> 
    </tr> 
    <tr> 
     <td><code>></code></td> 
     <td>></td> 
    </tr> 
    <tr> 
     <td><code>&</code></td> 
     <td>&</td> 
    </tr> 
    <tr> 
     <td><code>"</code></td> 
     <td>"</td> 
    </tr> 
    <tr> 
     <td><code>'</code></td> 
     <td>’</td> 
    </tr> 
   </tbody> 
  </table> 
  <h6>2)自定义实体</h6> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>DOCTYPE 根元素<span class="token punctuation">[</span>
<<span class="token operator">!</span>-<span class="token operator">-</span>实体声明<span class="token operator">--</span>>
<<span class="token operator">!</span>ENTITY 实体名 <span class="token string">"实体内容"</span>>
<span class="token punctuation">]</span>>
使用已定义的实体:&实体名<span class="token punctuation">;</span>
<?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<<span class="token operator">!</span>DOCTYPE sxt<span class="token punctuation">[</span>
<<span class="token operator">!</span>-<span class="token operator">-</span>实体声明<span class="token operator">--</span>>
<<span class="token operator">!</span>ENTITY xm <span class="token string">"明明"</span>>
<<span class="token operator">!</span>ENTITY gen <span class="token string">"保密"</span>>
<span class="token punctuation">]</span>>
<xxx>
<teacher>
 <name>明明<<span class="token operator">/</span>name>
 <gender>保密<<span class="token operator">/</span>gender>
 <<span class="token operator">/</span>teacher>
 <<span class="token operator">!</span>-<span class="token operator">-</span>引用实体的方法<span class="token operator">--</span>>
 <teacher>
 <name>&xm<span class="token punctuation">;</span><<span class="token operator">/</span>name>
 <gender>&gen<span class="token punctuation">;</span><<span class="token operator">/</span>gender>
 <<span class="token operator">/</span>teacher>
<<span class="token operator">/</span>xxx>
</code></pre> 
  <br> 
  <h5>4、文档类型声明</h5> 
  <p>    文档类型定义——DOCTYPE,文档类型声明,紧跟 XML 声明之后,包含所有实体声明</p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"utf-8"</span>?>
<<span class="token operator">!</span>DOCTYPE 根元素标记名<span class="token punctuation">[</span><<span class="token operator">!</span>-<span class="token operator">-</span>实体声明<span class="token operator">--</span>><span class="token punctuation">]</span>>
</code></pre> 
  <br> 
  <br> 
  <h3><font color="blue">五、组成</font></h3> 
  <h5>1、构成</h5> 
  <p>    所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:<br>     元素<br>     属性<br>     实体<br>     PCDATA<br>     CDATA<br>     CDATA 节(character data)</p> 
  <h5>2、CDATA</h5> 
  <p>    用于把整段文本解释为纯字符数据而不是标记的情况。如包含大量的<、>、&、或者"字符。CDATA 节中的所有字符都会被当做元素字符数据的常量部分,而不是 XML 标记,可以输入除]]>外任意字符,不能嵌套。</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span><span class="token namespace">[CDATA[ ...... ]]</span>>
</code></pre> 
  <h5>3、PCDATA</h5> 
  <p>    PCDATA 的意思是被解析的字符数据(parsed character data)。<br> 可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 的内置实体来分别替换它们。<br> <br><br> <br></p> 
  <h3><font color="blue">六、XML 解析(重点)</font></h3> 
  <p>    基本的解析方式有两种:一种叫 SAX,另一种叫 DOM。SAX(Simple API for XML)是基于事件流的解析,DOM(Document Object Model)是基于 XML 文档树结构的解析。SAX:效率高,数据量小,仅一次获取 ,DOM:整颗树加载到内存中,耗内存,可多次获取。</p> 
  <h5>1、DOM 解析</h5> 
  <p>    与 js 中的类似,使用 JAXP(Java API for XML Parsing),即:用于 XML 解析的 Java API.</p> 
  <p>    DOM(Document Object Model, 文档对象模型),在应用程序中,基于 DOM 的 XML分析器将一个 XML 文档转换成一个对象模型的集合(通常称为 DOM 树),应用程序正是通过对这个对象模型的操作,来实现对 XML 文档数据的操作。</p> 
  <p>    XML 本身是以树状的形式出现的,所以 DOM 操作的时候,也将按章树的形式进行转换。在整个 DOM 树种,最大的地方指的是 Document,表示一个文档,在这个文档中存在一个根节点。</p> 
  <p>    注意:在使用 DOM 操作的时候,每一个文字的区域也是一个节点,称为文本节点。<br> 核心操作接口</p> 
  <h6>在 DOM 解析中有以下四个核心的操作接口</h6> 
  <h6>Document :</h6> 
  <p>    此接口代表了整个 XML 文档,表示的是整棵 DOM 树的根,提供了对文档中的数据进行访问和操作的入口,通过 Document 节点可以访问 XML 文件中所有的元素内容。</p> 
  <h6>Node :</h6> 
  <p>    此接口在整个 DOM 树种具有举足轻重的低位,DOM 操作的核心接口中有很大一部分接口是从 Node 接口继承过来的。例如:Document、Element 等接口,在 DOM树种,每一个 Node 接口代表了 DOM 树种的一个节点。</p> 
  <h6>NodeList :</h6> 
  <p>    此接口表示的是一个节点的集合,一般用于表示有顺序关系的一组节点,例如:一个节点的子节点,当文档改变的时候会直接影响到 NodeList 集合。</p> 
  <h6>NamedNodeMap :</h6> 
  <p>    此接口表示的是一组节点和其唯一名字对应的一一对应关系,本接口主要用于属性节点的表示上。</p> 
  <h6>DOM 解析过程</h6> 
  <p>如果一个程序需要进行 DOM 解析读取操作的话,也需要按照如下的步骤进行:</p> 
  <ul> 
   <li>① 建 立 DocumentBuilderFactory : DocumentBuilderFactory factory =<br> DocumentBuilderFactory.newInstance();</li> 
   <li>②建立 DocumentBuilder: DocumentBuilder builder = factory.newDocumentBuilder();</li> 
   <li>③建立 Document : Document doc = builder.parse(“要解析的文件路径”);</li> 
   <li>④建立 NodeList : NodeList nl = doc.getElementsByTagName(“读取节点”);</li> 
   <li>⑤进行 XML 信息读取<br> DOM 操作除了可以进行解析外,也可以进行文档的生成<br> 如果想要生成 XML 文件,则在创建文档的时候,就应该使用 newDocument()方法<br> 如果要将 DOM 的文档输出,本身是比较麻烦的 。一次编写多次 copy</li> 
  </ul> 
  <pre><code class="prism language-java"><span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">createXml</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception<span class="token punctuation">{</span>
<span class="token comment">//获取解析器工厂</span>
DocumentBuilderFactory factory<span class="token operator">=</span>DocumentBuilderFactory<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//获取解析器</span>
DocumentBuilder builder<span class="token operator">=</span>factory<span class="token punctuation">.</span><span class="token function">newDocumentBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//创建文档</span>
Document doc<span class="token operator">=</span>builder<span class="token punctuation">.</span><span class="token function">newDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//创建元素、设置关系</span>
Element root<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"people"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element person<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element name<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element age<span class="token operator">=</span>doc<span class="token punctuation">.</span><span class="token function">createElement</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
name<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">createTextNode</span><span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
age<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>doc<span class="token punctuation">.</span><span class="token function">createTextNode</span><span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
doc<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>root<span class="token punctuation">)</span><span class="token punctuation">;</span>
root<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>person<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">appendChild</span><span class="token punctuation">(</span>age<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//写出去</span>
<span class="token comment">// 获得变压器工厂</span>
TransformerFactory tsf<span class="token operator">=</span>TransformerFactory<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Transformer ts<span class="token operator">=</span>tsf<span class="token punctuation">.</span><span class="token function">newTransformer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//设置编码</span>
ts<span class="token punctuation">.</span><span class="token function">setOutputProperty</span><span class="token punctuation">(</span>OutputKeys<span class="token punctuation">.</span>ENCODING<span class="token punctuation">,</span> <span class="token string">"UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//创建带有DOM节点的新输入源,充当转换Source树的持有者</span>
DOMSource source<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">DOMSource</span><span class="token punctuation">(</span>doc<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//充当转换结果的持有者</span>
File file<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"src/output.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
StreamResult result<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">StreamResult</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
ts<span class="token punctuation">.</span><span class="token function">transform</span><span class="token punctuation">(</span>source<span class="token punctuation">,</span> result<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> 
  <br> 
  <h5>2、SAX 解析</h5> 
  <p>    SAX(Simple API for XML)解析是按照 xml 文件的顺序一步一步的来解析。<br>     SAX 没有官方的标准机构,它不属于任何标准阻止或团体,也不属于任何公司或个人,而是提供任何人使用的一种计算机技术。<br>     SAX(Simple API for XML,操作 XML 的简单接口),与 DOM 操作不同的是,SAX 采用的是一种顺序的模式进行访问,是一种快速读取 XML 数据的方式。当使用 SAX 解析器进行操作的时候会触发一系列的事情,当扫描到文档(document)开始与结束、元素(element)开始与结束时都会调用相关的处理方法,并由这些操作方法作出相应的操作,直至整个文档扫描结束。<br>     如果要想实现这种 SAX 解析,则肯定首先建立一个 SAX 的解析器</p> 
  <pre><code class="prism language-java"><span class="token comment">// 1、创建解析器工厂</span>
SAXParserFactory factory <span class="token operator">=</span> SAXParserFactory<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 2、获得解析器</span>
SAXParser parser <span class="token operator">=</span> factory<span class="token punctuation">.</span><span class="token function">newSAXParser</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// SAX解析器 ,继承 DefaultHandler</span>
String path <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"resource/demo01.xml"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAbsolutePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 解析</span>
parser<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span>path<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">MySaxHandler</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> 
  <br> 
  <h5>3、DOM4j 解析</h5> 
  <p>    dom4j 是一个简单的开源库,用于处理 XML、 XPath 和 XSLT,它基于 Java 平台,使用 Java 的集合框架,全面集成了 DOM,SAX 和 JAXP。下载路径:<br> http://www.dom4j.org/dom4j-1.6.1/</p> 
  <p>http://sourceforge.net/projects/dom4j</p> 
  <p>可以使用 DOM4J 进行 XML 文件的读、写操作<br>     DOM4J 与 JDOM 一样都属于一个免费的 XML 开源组建,但是由于现在的开发框架中使用该技术较多,比如 Hibernate、Spring 等都使用 DOM4J 这个功能,所以作为介绍,大家可以对该组件有一个了解。并没有谁好谁坏,一般框架使用 DOM4J 较多,而我们平时如果要用则 JDOM 较常见。可以发现 DOM4J 发挥了很多新特性,比如输出格式就可以很好解析</p> 
  <pre><code class="prism language-powershell">File file = new File<span class="token punctuation">(</span><span class="token string">"resource/outputdom4j.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
SAXReader reader = new SAXReader<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 读取文件作为文档
Document doc = reader<span class="token punctuation">.</span>read<span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 获取文档的根元素
Element root = doc<span class="token punctuation">.</span>getRootElement<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 根据跟元素找到全部的子节点
Iterator<Element> iter = root<span class="token punctuation">.</span>elementIterator<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span><span class="token punctuation">(</span>iter<span class="token punctuation">.</span>hasNext<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
Element name = iter<span class="token punctuation">.</span>next<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span>println<span class="token punctuation">(</span><span class="token string">"value = "</span> <span class="token operator">+</span> name<span class="token punctuation">.</span>getText<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h6>创建代码</h6> 
  <pre><code class="prism language-powershell">/<span class="token operator">/</span> 使用DocumentHelper来创建 Document对象
Document document = DocumentHelper<span class="token punctuation">.</span>createDocument<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 创建元素并设置关系
Element person = document<span class="token punctuation">.</span>addElement<span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element name = person<span class="token punctuation">.</span>addElement<span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element age = person<span class="token punctuation">.</span>addElement<span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 设置文本
name<span class="token punctuation">.</span>setText<span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
age<span class="token punctuation">.</span>setText<span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 创建格式化输出器
OutputFormat of = OutputFormat<span class="token punctuation">.</span>createPrettyPrint<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
of<span class="token punctuation">.</span>setEncoding<span class="token punctuation">(</span><span class="token string">"utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 输出到文件
File file = new File<span class="token punctuation">(</span><span class="token string">"resource/outputdom4j.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
XMLWriter writer = new XMLWriter<span class="token punctuation">(</span>new FileOutputStream<span class="token punctuation">(</span>new
File<span class="token punctuation">(</span>file<span class="token punctuation">.</span>getAbsolutePath<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>of<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token operator">/</span><span class="token operator">/</span> 写出
writer<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">;</span>
writer<span class="token punctuation">.</span>flush<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
writer<span class="token punctuation">.</span>close<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> 
  <h6>Dom4J解析XML文档 代码</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 	1、得到要解析的文件对象</span>
<span class="token comment">// 	2、得到解析器</span>
<span class="token comment">//	3、通过解析器将文件对象转换成Document对象</span>
<span class="token comment">// 	4、得到当前文档对象的根节点</span>
<span class="token comment">// 	5、得到 根节点的所有子节点,返回迭代器</span>
<span class="token comment">// 	6、遍历,得到每一个子节点的名称和值</span>
 
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Dom4JReader</span> <span class="token punctuation">{</span>
	
	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{</span>
		
		<span class="token comment">// 1、得到要解析的文件对象</span>
		File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"src/test.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 2、得到解析器</span>
		SAXReader reader <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SAXReader</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 3、通过解析器将文件对象转换成Document对象</span>
		Document document <span class="token operator">=</span> reader<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 4、得到当前文档对象的根节点</span>
		Element root <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">getRootElement</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 5、得到 根节点的所有子节点,返回迭代器</span>
		Iterator<span class="token generics function"><span class="token punctuation"><</span>Element<span class="token punctuation">></span></span> iterator <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token function">elementIterator</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 6、遍历,得到每一个子节点的名称和值</span>
		<span class="token keyword">while</span><span class="token punctuation">(</span>iterator<span class="token punctuation">.</span><span class="token function">hasNext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
			Element el <span class="token operator">=</span> iterator<span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
			System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>el<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
			System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>el<span class="token punctuation">.</span><span class="token function">getText</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span>
		
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h6>Dom4JWriter 代码</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 使用DocumentHelper来创建 Document对象</span>
<span class="token comment">// 创建元素并设置关系</span>
<span class="token comment">// 设置文本</span>
<span class="token comment">// 创建格式化输出器</span>
<span class="token comment">// 输出到文件</span>
<span class="token comment">// 写出</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">Dom4JWriter</span> <span class="token punctuation">{</span>

	<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{</span>
		
		<span class="token comment">// 使用DocumentHelper来创建 Document对象</span>
		Document document <span class="token operator">=</span> DocumentHelper<span class="token punctuation">.</span><span class="token function">createDocument</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 创建元素并设置关系</span>
		Element person <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">addElement</span><span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		Element name <span class="token operator">=</span> person<span class="token punctuation">.</span><span class="token function">addElement</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		Element age <span class="token operator">=</span> person<span class="token punctuation">.</span><span class="token function">addElement</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 设置文本</span>
		name<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		age<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 创建格式化输出器</span>
		OutputFormat of <span class="token operator">=</span> OutputFormat<span class="token punctuation">.</span><span class="token function">createPrettyPrint</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		of<span class="token punctuation">.</span><span class="token function">setEncoding</span><span class="token punctuation">(</span><span class="token string">"utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 输出到文件</span>
		File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"src/outputdom4j.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		XMLWriter writer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XMLWriter</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span><span class="token function">getAbsolutePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>of<span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token comment">// 写出</span>
		writer<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>document<span class="token punctuation">)</span><span class="token punctuation">;</span>
		writer<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		writer<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		
	<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <br> 
  <h5>4、JDOM 解析</h5> 
  <p><strong>下载路径:</strong> http://www.jdom.org/downloads/index.html</p> 
  <p>    JDOM 是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序。 JDOM 是一个开源项目,它基于树形结构,利用纯 Java 的技术对 XML 文档实现解析、生成、序列化及多种操作。</p> 
  <p><strong>JDOM 解析</strong><br>     掌握 JDOM 开发工具的使用及产生原理可以使用 JDOM 进行读取或写入的操作在 W3C 本身提供的 XML 操作标准,DOM 和 SAX,但是从开发角度上看,DOM 和 SAX本身是各有特点的,DOM 可以修改,但不适合读取大文件,而 SAX 可以读取大文件,但是本身不能修改所谓的 JDOM = DOM 的可修改 + SAX 的读取大文件<br>     DOM 本身是一个免费的开源组建,直接从 www.jdom.org 上下载,下载后解压,将 jdom.jar 包拷贝到 Tomcat 目录(项目)的 lib 中</p> 
  <h6>JDOM 主要操作的类:</h6> 
  <p><a href="http://img.e-com-net.com/image/info8/4f81e6ffb7af46e69fa7de1de22a2098.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4f81e6ffb7af46e69fa7de1de22a2098.jpg" alt="XML (可扩展标记语言)_第3张图片" width="650" height="330" style="border:1px solid black;"></a><br>     我们发现 JDOM 的输出操作要比传统的 DOM 方便得多,而且也更加直观,包括在输出的时候都很容易了。此时观察到的是 JDOM 对于 DOM 解析的支持,但是也说,JDOM 本身也支持了 SAX 的特点;所以,可以使用 SAX 进行解析操作。</p> 
  <h6>解析代码:</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 获取SAX解析器</span>
SAXBuilder builder <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">SAXBuilder</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"resource/demo01.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取文档</span>
Document doc <span class="token operator">=</span> builder<span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span><span class="token function">getAbsolutePath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取根节点</span>
Element root <span class="token operator">=</span> doc<span class="token punctuation">.</span><span class="token function">getRootElement</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>root<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取根节点下所有的子节点, 也可以根据标签名称获取指定的直接点</span>
List<span class="token generics function"><span class="token punctuation"><</span>Element<span class="token punctuation">></span></span> list <span class="token operator">=</span> root<span class="token punctuation">.</span><span class="token function">getChildren</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>list<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> x <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> x<span class="token operator"><</span>list<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> x<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
Element e <span class="token operator">=</span> list<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 获取元素的名称和里面的文本</span>
String name <span class="token operator">=</span> e<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>name <span class="token operator">+</span> <span class="token string">"="</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getText</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"=================="</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span>
</code></pre> 
  <h6>创建代码</h6> 
  <pre><code class="prism language-java"><span class="token comment">// 创建节点</span>
Element person <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Element</span><span class="token punctuation">(</span><span class="token string">"person"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element name <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Element</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Element age <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Element</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 创建属性</span>
Attribute id <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Attribute</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">,</span><span class="token string">"1"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置文本</span>
name<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"shsxt"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
age<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span><span class="token string">"10"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置关系</span>
Document doc <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Document</span><span class="token punctuation">(</span>person<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">addContent</span><span class="token punctuation">(</span>name<span class="token punctuation">)</span><span class="token punctuation">;</span>
name<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span>
person<span class="token punctuation">.</span><span class="token function">addContent</span><span class="token punctuation">(</span>age<span class="token punctuation">)</span><span class="token punctuation">;</span>
XMLOutputter out <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XMLOutputter</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
File file <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"resource/outputjdom.xml"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
out<span class="token punctuation">.</span><span class="token function">output</span><span class="token punctuation">(</span>doc<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span>file<span class="token punctuation">.</span><span class="token function">getAbsoluteFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> 
  <br> 
  <br> 
  <h3><font color="blue">七、XPATH</font></h3> 
  <h5>1、XPATH</h5> 
  <p>    XPath 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。XPath非常类似对数据库操作的 SQL 语言,或者说 JQuery,它可以方便开发者抓起文档中需要的东西。(dom4j 也支持 xpath)</p> 
  <h5>2.节点类型</h5> 
  <p>    XPath 中有七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点 (或称为根节点)。<br>     文档中存在元素节点,属性节点,根节点</p> 
  <h5>3.常用路径表达式</h5> 
  <table> 
   <thead> 
    <tr> 
     <th>表达式</th> 
     <th>描述</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>节点名称(nodename)</td> 
     <td>选取此节点的所有子节点</td> 
    </tr> 
    <tr> 
     <td>/</td> 
     <td>从根节点选取</td> 
    </tr> 
    <tr> 
     <td>//</td> 
     <td>从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置</td> 
    </tr> 
    <tr> 
     <td>.</td> 
     <td>选取当前节点</td> 
    </tr> 
    <tr> 
     <td>…</td> 
     <td>选取当前节点的父节点</td> 
    </tr> 
    <tr> 
     <td>@</td> 
     <td>选取属性</td> 
    </tr> 
   </tbody> 
  </table> 
  <p><strong>示例如下:</strong><br> //@lang ---- 选取所有名为 lang 的属性</p> 
  <h5>4.限定语</h5> 
  <p>用来查找某个特定的节点或者包含某个指定的值的节点。以方括号括起</p> 
  <pre><code class="prism language-bash">//book<span class="token punctuation">[</span>price<span class="token operator">></span>35.00<span class="token punctuation">]</span> 选择所有 book 元素,且其中的 price 元素的值须大于 35.00
/bookstore/book<span class="token punctuation">[</span>1<span class="token punctuation">]</span> 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book<span class="token punctuation">[</span>last<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span> 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book<span class="token punctuation">[</span>last<span class="token punctuation">(</span><span class="token punctuation">)</span>-1<span class="token punctuation">]</span> 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book<span class="token punctuation">[</span>position<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator"><</span>3<span class="token punctuation">]</span> 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title<span class="token punctuation">[</span>@lang<span class="token punctuation">]</span> 选取所有拥有名为 lang 的属性的 title 元素。
//title<span class="token punctuation">[</span>@lang<span class="token operator">=</span><span class="token string">'eng'</span><span class="token punctuation">]</span> 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book<span class="token punctuation">[</span>price<span class="token operator">></span>35.00<span class="token punctuation">]</span> 选取所有 bookstore 元素的 book 元素,且其中的 price
元素的值须大于 35.00。
/bookstore/book<span class="token punctuation">[</span>price<span class="token operator">></span>35.00<span class="token punctuation">]</span>/title 选取所有 bookstore 元素中的 book 元素的 title 元
素,且其中的 price 元素的值须大于 35.00。
</code></pre> 
  <h5>5 .通配符</h5> 
  <table> 
   <thead> 
    <tr> 
     <th>通配符</th> 
     <th>描述</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>*</td> 
     <td>匹配任何元素节点</td> 
    </tr> 
    <tr> 
     <td>@*</td> 
     <td>匹配任何属性节点</td> 
    </tr> 
    <tr> 
     <td>node()</td> 
     <td>匹配任何类型的节点</td> 
    </tr> 
    <tr> 
     <td><code>|</code></td> 
     <td>选取若干路径</td> 
    </tr> 
   </tbody> 
  </table> 
  <h6>使用示例</h6> 
  <table> 
   <thead> 
    <tr> 
     <th>路径表达式</th> 
     <th>结果</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>/bookstore/*</td> 
     <td>选取 bookstore 元素的所有子节点</td> 
    </tr> 
    <tr> 
     <td>//*</td> 
     <td>选取文档中的所有元素</td> 
    </tr> 
    <tr> 
     <td>//title[@*]</td> 
     <td>选取所有带有属性的 title 元素。</td> 
    </tr> 
    <tr> 
     <td>//book/title</td> 
     <td>//book/price</td> 
    </tr> 
    <tr> 
     <td>//title //price</td> 
     <td>选取所有文档中的 title 和 price 元素。</td> 
    </tr> 
    <tr> 
     <td>/bookstore/book/title //price</td> 
     <td>选取所有属于 bookstore 元素的 book 元素的 title 元素,以及文档中所有的 price 元素</td> 
    </tr> 
   </tbody> 
  </table> 
  <br> 
  <br> 
  <h3><font color="blue">八、DTD</font></h3> 
  <p>    使用 DTD 可以对文档的内容进行约束,XML 中的 DTD 数据必须用<!DOCTYPE>标记说明,语法格式如下:</p> 
  <p><strong>XML 的元素内容定义格式如下:</strong></p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT 元素内容描述字符串>
</code></pre> 
  <p><strong>DTD 还可以描述子元素的结构,其使用语法:</strong></p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT 子元素结构名称 子元素结构表达式>
</code></pre> 
  <p><strong>其中子元素结构有以下几种常用的定义方式:</strong><br> 1.按顺序包括 B、C、D、的所有内容:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token punctuation">,</span>C<span class="token punctuation">,</span>D<span class="token punctuation">)</span>>
</code></pre> 
  <p>2.在 A 中要包含 B、C、D、的任意一个的内容:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token punctuation">|</span>C<span class="token punctuation">|</span>D<span class="token punctuation">)</span>>
</code></pre> 
  <p>3.在 A 中包含 0-1 个 B:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B?<span class="token punctuation">)</span>>
</code></pre> 
  <p>4.在 A 中要包含 1 次以上各 B:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token operator">+</span><span class="token punctuation">)</span>>
</code></pre> 
  <p>5.在 A 中要包含 O 次以上各 B:</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A<span class="token punctuation">(</span>B<span class="token operator">*</span><span class="token punctuation">)</span>>
</code></pre> 
  <p>6.空元素</p> 
  <pre><code class="prism language-powershell"><<span class="token operator">!</span>ELEMENT A EMPTY>
</code></pre> 
  <p><strong>代码示例:</strong></p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<<span class="token operator">!</span>DOCTYPE persons<span class="token punctuation">[</span>
<<span class="token operator">!</span>ELEMENT persons <span class="token punctuation">(</span>person<span class="token operator">+</span><span class="token punctuation">)</span>>
<<span class="token operator">!</span>ELEMENT person <span class="token punctuation">(</span> name <span class="token punctuation">,</span> password? <span class="token punctuation">,</span> age<span class="token operator">+</span><span class="token punctuation">)</span> >
 <<span class="token operator">!</span>ATTLIST person sex <span class="token punctuation">(</span>男<span class="token punctuation">|</span>女<span class="token punctuation">)</span> <span class="token comment">#REQUIRED> </span>
 <<span class="token operator">!</span>ATTLIST person id ID <span class="token comment">#REQUIRED> </span>
 <<span class="token operator">!</span>ELEMENT name <span class="token punctuation">(</span><span class="token comment">#PCDATA)> </span>
 <<span class="token operator">!</span>ELEMENT password <span class="token punctuation">(</span><span class="token comment">#PCDATA)> </span>
 <<span class="token operator">!</span>ELEMENT age <span class="token punctuation">(</span><span class="token comment">#PCDATA)> </span>
<span class="token punctuation">]</span>> 
<persons>
 <person sex=<span class="token string">"男"</span> id=<span class="token string">"p1"</span>> 
 <name><<span class="token operator">/</span>name> 
 <password><<span class="token operator">/</span>password> 
 <age><<span class="token operator">/</span>age> 
 <<span class="token operator">/</span>person>
 <person sex=<span class="token string">"女"</span> id=<span class="token string">"p2"</span>> 
 <name><<span class="token operator">/</span>name> 
 <password><<span class="token operator">/</span>password> 
 <age><<span class="token operator">/</span>age> 
<<span class="token operator">/</span>person> 
<<span class="token operator">/</span>persons> 
</code></pre> 
  <br> 
  <br> 
  <h3><font color="blue">九、schema 简单编写</font></h3> 
  <p>    XML Schema 本身也是一种 XML 构造,它用来描述[哪个元素,在什么时候出现],[该元素具有什么样的属性]等等,也就是说,XML Schema 是对 XML 的树形构造加以描述说明的一种语言。原本,使用 DTD 对 XML 的树形构造加以描述说明,但 DTD 存在严重的局限性,DTD不能定义数据的类型,语法也与 XML 语言完全不一样,在使用的便利性,数据结构表达的严谨性上存在问题。使用 schema 对 xml 格式严格检查。</p> 
  <p><strong>简单的 XML Schema 例</strong><br> <strong>hello.xml</strong></p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<hello xmlns:xsi=<span class="token string">"http://www.w3.org/2001/XMLSchema-instance"</span> 
xsi:noNamespaceSchemaLocation=<span class="token string">"file:///C:/Users/Administrator/Desktop/test.xsd"</span>>xmlschema简单入门 <<span class="token operator">/</span>hello>
</code></pre> 
  <p><strong>写一个简单的 XML Schema</strong></p> 
  <pre><code class="prism language-powershell"><?xml version=<span class="token string">"1.0"</span> encoding=<span class="token string">"UTF-8"</span>?>
<xs:schema xmlns:xs=<span class="token string">"http://www.w3.org/2001/XMLSchema"</span>>
<xs:element name=<span class="token string">"hello"</span> <span class="token function">type</span>=<span class="token string">"xs:string"</span><span class="token operator">/</span>> 
<<span class="token operator">/</span>xs:schema>
</code></pre> 
  <p><strong>解说:</strong></p> 
  <pre><code class="prism language-bash">第一行:
<span class="token operator"><</span>?xml version<span class="token operator">=</span><span class="token string">"1.0"</span> encoding<span class="token operator">=</span><span class="token string">"utf-8"</span>?<span class="token operator">></span>
XML 申明。XML Schema 本身也是 XML 文档,所以它遵循 XML 记述语法。使用 encoding属性指定文档的编码格式。
</code></pre> 
  <pre><code class="prism language-bash">根节点:
<span class="token operator"><</span>xs:schema xmlns:xs<span class="token operator">=</span><span class="token string">"http://www.w3.org/2001/XMLSchema"</span><span class="token operator">></span>
其中 xs 是命名空间,schema 是根节点名。
注意 xs:schema 与 xmlns:xs 中的 xs 要完全一样(名称可以任意,只要一样就可以),它标明以 xs:开头的节点元素是 http://www.w3.org/2001/XMLSchema 定义的元素。
</code></pre> 
  <pre><code class="prism language-bash">element 元素:
<span class="token operator"><</span>xs:element name<span class="token operator">=</span><span class="token string">"hello"</span> type<span class="token operator">=</span><span class="token string">"xs:string"</span><span class="token operator">></span>
上面已经说明,xs:element 表示 element 是 http://www.w3.org/2001/XMLSchema 中定义的元素。它的 name 属性用来定义它所描述的 XML 文档中的节点名。type 是表示该节点的值的类型。这里的 xs:string(string 类型)表示 hello 节点不能包含子节点,不能包含属性,它的内容值应该是 string 类型。除了 string 之外,XML Schema 还有很多其他类型。
</code></pre> 
  <pre><code class="prism language-bash">最后使用
<span class="token operator"><</span>/xs:schema<span class="token operator">></span>
完成整个 XML Schema 描述。
</code></pre> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1754382299232747520"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(web,前端_基础)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1943993659967991808.htm"
                           title="系统学习Python——并发模型和异步编程:进程、线程和GIL" target="_blank">系统学习Python——并发模型和异步编程:进程、线程和GIL</a>
                        <span class="text-muted"></span>

                        <div>分类目录:《系统学习Python》总目录在文章《并发模型和异步编程:基础知识》我们简单介绍了Python中的进程、线程和协程。本文就着重介绍Python中的进程、线程和GIL的关系。Python解释器的每个实例都是一个进程。使用multiprocessing或concurrent.futures库可以启动额外的Python进程。Python的subprocess库用于启动运行外部程序(不管使用何种</div>
                    </li>
                    <li><a href="/article/1943993533169987584.htm"
                           title="C++11堆操作深度解析:std::is_heap与std::is_heap_until原理解析与实践" target="_blank">C++11堆操作深度解析:std::is_heap与std::is_heap_until原理解析与实践</a>
                        <span class="text-muted"></span>

                        <div>文章目录堆结构基础与函数接口堆的核心性质函数签名与核心接口std::is_heapstd::is_heap_until实现原理深度剖析std::is_heap的验证逻辑std::is_heap_until的定位策略算法优化细节代码实践与案例分析基础用法演示自定义比较器实现最小堆检查边缘情况处理性能分析与实际应用时间复杂度对比典型应用场景与手动实现的对比注意事项与最佳实践迭代器要求比较器设计C++标</div>
                    </li>
                    <li><a href="/article/1943992776169418752.htm"
                           title="Flask框架入门:快速搭建轻量级Python网页应用" target="_blank">Flask框架入门:快速搭建轻量级Python网页应用</a>
                        <span class="text-muted">「已注销」</span>
<a class="tag" taget="_blank" href="/search/python-AI/1.htm">python-AI</a><a class="tag" taget="_blank" href="/search/python%E5%9F%BA%E7%A1%80/1.htm">python基础</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99%E7%BD%91%E7%BB%9C/1.htm">网站网络</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>转载:Flask框架入门:快速搭建轻量级Python网页应用1.Flask基础Flask是一个使用Python编写的轻量级Web应用框架。它的设计目标是让Web开发变得快速简单,同时保持应用的灵活性。Flask依赖于两个外部库:Werkzeug和Jinja2,Werkzeug作为WSGI工具包处理Web服务的底层细节,Jinja2作为模板引擎渲染模板。安装Flask非常简单,可以使用pip安装命令</div>
                    </li>
                    <li><a href="/article/1943991891796226048.htm"
                           title="Python Flask 框架入门:快速搭建 Web 应用的秘诀" target="_blank">Python Flask 框架入门:快速搭建 Web 应用的秘诀</a>
                        <span class="text-muted">Python编程之道</span>
<a class="tag" taget="_blank" href="/search/Python%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%B8%8E%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">Python人工智能与大数据</a><a class="tag" taget="_blank" href="/search/Python%E7%BC%96%E7%A8%8B%E4%B9%8B%E9%81%93/1.htm">Python编程之道</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>PythonFlask框架入门:快速搭建Web应用的秘诀关键词Flask、微框架、路由系统、Jinja2模板、请求处理、WSGI、Web开发摘要想快速用Python搭建一个灵活的Web应用?Flask作为“微框架”代表,凭借轻量、可扩展的特性,成为初学者和小型项目的首选。本文将从Flask的核心概念出发,结合生活化比喻、代码示例和实战案例,带你一步步掌握:如何用Flask搭建第一个Web应用?路由</div>
                    </li>
                    <li><a href="/article/1943991261279088640.htm"
                           title="C++ 11 Lambda表达式和min_element()与max_element()的使用_c++ lamda函数 min_element((1)" target="_blank">C++ 11 Lambda表达式和min_element()与max_element()的使用_c++ lamda函数 min_element((1)</a>
                        <span class="text-muted">2401_84976182</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上CC++开发知识点,真正体系化!由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新如果你需要这些资料,可以戳这里获取#include#include#includeusingnamespacestd;boolcmp(int</div>
                    </li>
                    <li><a href="/article/1943990125864218624.htm"
                           title="JavaScript 树形菜单总结" target="_blank">JavaScript 树形菜单总结</a>
                        <span class="text-muted">Auscy</span>
<a class="tag" taget="_blank" href="/search/microsoft/1.htm">microsoft</a>
                        <div>树形菜单是前端开发中常见的交互组件,用于展示具有层级关系的数据(如文件目录、分类列表、组织架构等)。以下从核心概念、实现方式、常见功能及优化方向等方面进行总结。一、核心概念层级结构:数据以父子嵌套形式存在,如{id:1,children:[{id:2}]}。节点:树形结构的基本单元,包含自身信息及子节点(若有)。展开/折叠:子节点的显示与隐藏切换,是树形菜单的核心交互。递归渲染:因数据层级不固定,</div>
                    </li>
                    <li><a href="/article/1943989244456398848.htm"
                           title="冒泡、选择、插入排序:三大基础排序算法深度解析(C语言实现)" target="_blank">冒泡、选择、插入排序:三大基础排序算法深度解析(C语言实现)</a>
                        <span class="text-muted">xienda</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/1.htm">排序算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>在算法学习道路上,排序算法是每位程序员必须掌握的基石。本文将深入解析冒泡排序、选择排序和插入排序这三种基础排序算法,通过C语言代码实现和对比分析,帮助读者彻底理解它们的差异与应用场景。算法原理与代码实现1.冒泡排序(BubbleSort)工作原理:通过重复比较相邻元素,将较大元素逐步"冒泡"到数组末尾。voidbubbleSort(intarr[],intn){  for(inti=0;iarr[</div>
                    </li>
                    <li><a href="/article/1943987856808669184.htm"
                           title="前端项目架构设计要领" target="_blank">前端项目架构设计要领</a>
                        <span class="text-muted"></span>

                        <div>1.架构设计的核心目标在设计前端项目架构时,核心目标是模块化、可维护、可扩展、可测试,以及开发效率的最大化。这些目标可以通过以下几个方面来实现:组件化:将UI功能封装为可复用的组件。模块化:将业务逻辑分解为独立的模块或服务。自动化构建与部署:实现自动化构建、测试和部署流程,减少人为操作的错误。代码规范化与检查:确保团队协作时,代码风格和质量一致。2.项目目录结构设计一个清晰合理的目录结构对大型项目</div>
                    </li>
                    <li><a href="/article/1943985461282271232.htm"
                           title="PyTorch & TensorFlow速成复习:从基础语法到模型部署实战(附FPGA移植衔接)" target="_blank">PyTorch & TensorFlow速成复习:从基础语法到模型部署实战(附FPGA移植衔接)</a>
                        <span class="text-muted">阿牛的药铺</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95%E7%A7%BB%E6%A4%8D%E9%83%A8%E7%BD%B2/1.htm">算法移植部署</a><a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/tensorflow/1.htm">tensorflow</a><a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a>
                        <div>PyTorch&TensorFlow速成复习:从基础语法到模型部署实战(附FPGA移植衔接)引言:为什么算法移植工程师必须掌握框架基础?针对光学类产品算法FPGA移植岗位需求(如可见光/红外图像处理),深度学习框架是算法落地的"桥梁"——既要用PyTorch/TensorFlow验证算法可行性,又要将训练好的模型(如CNN、目标检测)转换为FPGA可部署的格式(ONNX、TFLite)。本文采用"</div>
                    </li>
                    <li><a href="/article/1943983065500020736.htm"
                           title="Python之七彩花朵代码实现" target="_blank">Python之七彩花朵代码实现</a>
                        <span class="text-muted">PlutoZuo</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Python之七彩花朵代码实现文章目录Python之七彩花朵代码实现下面是一个简单的使用Python的七彩花朵。这个示例只是一个简单的版本,没有很多高级功能,但它可以作为一个起点,你可以在此基础上添加更多功能。importturtleastuimportrandomasraimportmathtu.setup(1.0,1.0)t=tu.Pen()t.ht()colors=['red','skybl</div>
                    </li>
                    <li><a href="/article/1943982558085705728.htm"
                           title="(Python基础篇)了解和使用分支结构" target="_blank">(Python基础篇)了解和使用分支结构</a>
                        <span class="text-muted">EternityArt</span>
<a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E7%AF%87/1.htm">基础篇</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>目录一、引言二、Python分支结构的类型与语法(一)if语句(单分支)(二)if-else语句(双分支)(三)if-elif-else语句(多分支)三、分支结构的应用场景(一)提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”则提示正确,否则,如果用户名不是admin还提示用户用户名不存在,(二)提示用户输入用户名,然后再提示输入密码,如果用户名是“adm</div>
                    </li>
                    <li><a href="/article/1943982558555467776.htm"
                           title="(Python基础篇)循环结构" target="_blank">(Python基础篇)循环结构</a>
                        <span class="text-muted">EternityArt</span>
<a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E7%AF%87/1.htm">基础篇</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>一、什么是Python循环结构?循环结构是编程中重复执行代码块的机制。在Python中,循环允许你:1.迭代处理数据:遍历列表、字典、文件内容等。2.自动化重复任务:如批量处理数据、生成序列等。3.控制执行流程:根据条件决定是否继续或终止循环。二、为什么需要循环结构?假设你需要打印1到100的所有偶数:没有循环:需手动编写100行print()语句。print(0)print(2)print(4)</div>
                    </li>
                    <li><a href="/article/1943982559000064000.htm"
                           title="(Python基础篇)字典的操作" target="_blank">(Python基础篇)字典的操作</a>
                        <span class="text-muted">EternityArt</span>
<a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E7%AF%87/1.htm">基础篇</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、引言在Python编程中,字典(Dictionary)是一种极具灵活性的数据结构,它通过“键-值对”(key-valuepair)的形式存储数据,如同现实生活中的字典——通过“词语(键)”快速查找“释义(值)”。相较于列表和元组的有序索引访问,字典的优势在于基于键的快速查找,这使得它在处理需要频繁通过唯一标识获取数据的场景中极为高效。掌握字典的操作,能让我们更高效地组织和管理复杂数据,是Pyt</div>
                    </li>
                    <li><a href="/article/1943981674891112448.htm"
                           title="基于架构的软件设计(Architecture-Based Software Design,ABSD)是一种以架构为核心的软件开发方法" target="_blank">基于架构的软件设计(Architecture-Based Software Design,ABSD)是一种以架构为核心的软件开发方法</a>
                        <span class="text-muted"></span>

                        <div>ABSD方法与生命周期基于架构的软件设计(Architecture-BasedSoftwareDesign,ABSD)是一种以架构为核心的软件开发方法,强调在开发的各个阶段都要以架构为中心,确保系统的整体结构和质量属性得到有效管理。ABSD方法是一个自顶向下、递归细化的过程,软件系统的架构通过该方法得到细化,直到能产生软件构件和类。ABSD方法的三个基础功能的分解:使用基于模块的内聚和耦合技术,将</div>
                    </li>
                    <li><a href="/article/1943981422331097088.htm"
                           title="Java大厂面试故事:谢飞机的互联网音视频场景技术面试全纪录(Spring Boot、MyBatis、Kafka、Redis、AI等)" target="_blank">Java大厂面试故事:谢飞机的互联网音视频场景技术面试全纪录(Spring Boot、MyBatis、Kafka、Redis、AI等)</a>
                        <span class="text-muted">来旺</span>
<a class="tag" taget="_blank" href="/search/Java%E5%9C%BA%E6%99%AF%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">Java场景面试宝典</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/Boot/1.htm">Boot</a><a class="tag" taget="_blank" href="/search/MyBatis/1.htm">MyBatis</a><a class="tag" taget="_blank" href="/search/Kafka/1.htm">Kafka</a><a class="tag" taget="_blank" href="/search/Redis/1.htm">Redis</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a>
                        <div>Java大厂面试故事:谢飞机的互联网音视频场景技术面试全纪录(SpringBoot、MyBatis、Kafka、Redis、AI等)互联网大厂技术面试不仅考察技术深度,更注重业务场景与系统设计能力。本篇以严肃面试官与“水货”程序员谢飞机的对话,带你体验音视频业务场景下的Java面试全过程,涵盖主流技术栈,并附详细答案解析,助你面试无忧。故事场景设定谢飞机是一名有趣但技术基础略显薄弱的程序员,这次应</div>
                    </li>
                    <li><a href="/article/1943979785097113600.htm"
                           title="【前端】jQuery数组合并去重方法总结" target="_blank">【前端】jQuery数组合并去重方法总结</a>
                        <span class="text-muted"></span>

                        <div>在jQuery中合并多个数组并去重,推荐使用原生JavaScript的Set对象(高效简单)或$.unique()(仅适用于DOM元素,不适用于普通数组)。以下是完整解决方案:方法1:使用ES6Set(推荐)//定义多个数组constarr1=[1,2,3];constarr2=[2,3,4];constarr3=[3,4,5];//合并数组并用Set去重constmergedArray=[...</div>
                    </li>
                    <li><a href="/article/1943975880120397824.htm"
                           title="php SPOF" target="_blank">php SPOF</a>
                        <span class="text-muted">贵哥的编程之路(热爱分享 为后来者)</span>
<a class="tag" taget="_blank" href="/search/PHP%E8%AF%AD%E8%A8%80%E7%BB%8F%E5%85%B8%E7%A8%8B%E5%BA%8F100%E9%A2%98/1.htm">PHP语言经典程序100题</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.什么是单点故障(SPOF)?单点故障指的是系统中某个组件一旦失效,整个系统或服务就会不可用。常见的单点有:数据库、缓存、Web服务器、负载均衡、网络设备等。2.常见单点故障场景只有一台数据库服务器,宕机后所有业务不可用只有一台Redis缓存,挂掉后缓存全部失效只有一台Web服务器,挂掉后网站无法访问只有一个负载均衡节点,挂掉后流量无法分发只有一条网络链路,断开后所有服务失联3.消除单点故障的主</div>
                    </li>
                    <li><a href="/article/1943974618851241984.htm"
                           title="Vue3+Vite+TS+Axios整合详细教程" target="_blank">Vue3+Vite+TS+Axios整合详细教程</a>
                        <span class="text-muted">老马聊技术</span>
<a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/Vite/1.htm">Vite</a><a class="tag" taget="_blank" href="/search/TS/1.htm">TS</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a>
                        <div>1.Vite简介Vite是新一代的前端构建工具,在尤雨溪开发Vue3.0的时候诞生。类似于Webpack+Webpack-dev-server。其主要利用浏览器ESM特性导入组织代码,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。生产中利用Rollup作为打包工具,号称下一代的前端构建工具。vite是一种新型的前端构建工具,能够显著的提升前端开发者的体验。它主要有俩部分组成:一个</div>
                    </li>
                    <li><a href="/article/1943971211121848320.htm"
                           title="前端 NPM 包的依赖可视化分析工具推荐" target="_blank">前端 NPM 包的依赖可视化分析工具推荐</a>
                        <span class="text-muted">前端视界</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E8%89%BA%E5%8C%A0%E9%A6%86/1.htm">前端艺匠馆</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/arcgis/1.htm">arcgis</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>前端NPM包的依赖可视化分析工具推荐关键词:NPM、依赖管理、可视化分析、前端工程、包管理、依赖冲突、性能优化摘要:本文将深入探讨前端开发中NPM包依赖可视化分析的重要性,介绍5款主流工具的使用方法和特点,并通过实际案例展示如何利用这些工具优化项目依赖结构、解决版本冲突问题以及提升构建性能。文章将帮助开发者更好地理解和掌控项目依赖关系,提高开发效率和项目可维护性。背景介绍目的和范围本文旨在为前端开</div>
                    </li>
                    <li><a href="/article/1943968187112550400.htm"
                           title="OpenWebUI(12)源码学习-后端constants.py常量定义文件" target="_blank">OpenWebUI(12)源码学习-后端constants.py常量定义文件</a>
                        <span class="text-muted">青苔猿猿</span>
<a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">AI大模型</a><a class="tag" taget="_blank" href="/search/openwebui/1.htm">openwebui</a><a class="tag" taget="_blank" href="/search/constants%E5%B8%B8%E9%87%8F%E5%AE%9A%E4%B9%89/1.htm">constants常量定义</a>
                        <div>目录文件名:`constants.py`功能概述:主要功能点详解1.**MESSAGES枚举类**2.**WEBHOOK_MESSAGES枚举类**3.**ERROR_MESSAGES枚举类**✅默认错误模板✅认证与用户相关错误✅资源冲突与重复错误✅验证失败类错误✅权限限制类错误✅文件上传与格式错误✅模型与API错误✅请求频率与安全限制✅数据库与配置错误4.**TASKS枚举类**✅总结实际应用场</div>
                    </li>
                    <li><a href="/article/1943966043139534848.htm"
                           title="利用技术分享提升个人影响力" target="_blank">利用技术分享提升个人影响力</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97/1.htm">计算</a><a class="tag" taget="_blank" href="/search/AI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%B8%8E%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">AI人工智能与大数据</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">AI大模型企业级应用开发实战</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%8E%82%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">大厂程序员</a><a class="tag" taget="_blank" href="/search/%E7%A1%85%E5%9F%BA%E8%AE%A1%E7%AE%97/1.htm">硅基计算</a><a class="tag" taget="_blank" href="/search/%E7%A2%B3%E5%9F%BA%E8%AE%A1%E7%AE%97/1.htm">碳基计算</a><a class="tag" taget="_blank" href="/search/%E8%AE%A4%E7%9F%A5%E8%AE%A1%E7%AE%97/1.htm">认知计算</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9%E8%AE%A1%E7%AE%97/1.htm">生物计算</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">系统架构设计</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%93%B2%E5%AD%A6/1.htm">软件哲学</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%9E%E7%8E%B0%E8%B4%A2%E5%AF%8C%E8%87%AA%E7%94%B1/1.htm">程序员实现财富自由</a>
                        <div>《利用技术分享提升个人影响力》关键词:技术分享、个人品牌、影响力、内容创作、互动反馈、持续成长摘要:本文将深入探讨技术分享在个人发展中的重要作用,通过详细分析技术分享的意义、平台选择、内容创作、互动反馈及个人影响力提升策略,帮助读者掌握利用技术分享提升个人影响力的实用方法。第一部分:引言与基础第1章:技术分享的意义与价值1.1.1技术分享的历史与发展技术分享作为一种知识传播的方式,其历史可以追溯到</div>
                    </li>
                    <li><a href="/article/1943964406694080512.htm"
                           title="RocketMQ 基础教程-应用篇-死信队列" target="_blank">RocketMQ 基础教程-应用篇-死信队列</a>
                        <span class="text-muted">码炫课堂-码哥</span>
<a class="tag" taget="_blank" href="/search/rocketmq%E4%B8%93%E9%A2%98/1.htm">rocketmq专题</a><a class="tag" taget="_blank" href="/search/rocketmq/1.htm">rocketmq</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析</div>
                    </li>
                    <li><a href="/article/1943964154603827200.htm"
                           title="ssrf漏洞复现" target="_blank">ssrf漏洞复现</a>
                        <span class="text-muted">ξ流ぁ星ぷ132</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>目录基础环境查看phpinfo发现线索探测端口+gopher协议基础环境这里发现一些基础协议呗过滤掉了。但是有个提示的info,于是先看看查看phpinfo发现线索发现这台主机的地址了,于是猜测这个网段应该还有其他主机,试了一下172.21.0.1:80172.21.0.3:80果然如下(0.1是陷阱就不浪费时间了,)探测端口+gopher协议然后对这个172.21.0.3这个主机探测端口发现63</div>
                    </li>
                    <li><a href="/article/1943961125532004352.htm"
                           title="数字孪生技术为UI前端注入新活力:实现产品设计的沉浸式体验" target="_blank">数字孪生技术为UI前端注入新活力:实现产品设计的沉浸式体验</a>
                        <span class="text-muted">ui设计前端开发老司机</span>
<a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a>
                        <div>hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年+经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:从“平面交互”到“沉浸体验”的UI革命当用户在电商APP中翻看3D家具模型却无法感知其与自家客厅的匹配度,当设计师在2D屏幕上绘制汽车内饰却难以预判实际乘坐体验——传统UI设计的“平面化、静态化、割裂感”</div>
                    </li>
                    <li><a href="/article/1943960369345130496.htm"
                           title="Java三年经验程序员技术栈全景指南:从前端到架构,对标阿里美团全栈要求" target="_blank">Java三年经验程序员技术栈全景指南:从前端到架构,对标阿里美团全栈要求</a>
                        <span class="text-muted">可曾去过倒悬山</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>Java三年经验程序员技术栈全景指南:从前端到架构,对标阿里美团全栈要求三年经验是Java程序员的分水岭,技术栈深度决定你成为“业务码农”还是“架构师候选人”。本文整合阿里、美团、滴滴等大厂招聘要求,为你绘制可落地的进阶路线。一、Java核心:从语法糖到JVM底层三年经验与初级的核心差异在于系统级理解,大厂面试常考以下能力:JVM与性能调优内存模型(堆外内存、元空间)、GC算法(G1/ZGC适用场</div>
                    </li>
                    <li><a href="/article/1943951549751422976.htm"
                           title="NGS测序基础梳理01-文库构建(Library Preparation)" target="_blank">NGS测序基础梳理01-文库构建(Library Preparation)</a>
                        <span class="text-muted">qq_21478261</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/1.htm">生物信息</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9%E5%AD%A6/1.htm">生物学</a>
                        <div>本文介绍Illumina测序平台文库构建(LibraryPreparation)步骤,文库结构。写作时间:2020.05。推荐阅读:10W字《Python可视化教程1.0》来了!一份由公众号「pythonic生物人」精心制作的PythonMatplotlib可视化系统教程,105页PDFhttps://mp.weixin.qq.com/s/QaSmucuVsS_DR-klfpE3-Q10W字《Rg</div>
                    </li>
                    <li><a href="/article/1943951550498009088.htm"
                           title="NGS测序基础梳理02-簇生成(Cluster Generation)及flow cell介绍" target="_blank">NGS测序基础梳理02-簇生成(Cluster Generation)及flow cell介绍</a>
                        <span class="text-muted">qq_21478261</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/1.htm">生物信息</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF%E5%AD%A6/1.htm">生物信息学</a>
                        <div>本文图解Illumina测序平台,flowcell表面簇生成(ClusterGeneration)过程。写作时间:2020,有问题可留言或者我的公众号。本文将了解到什么?1flowcell2簇生成为何要进行簇生成?簇生成步骤1)文库与flowcell表面P5杂交与互补链合成2)双链变性3)桥式PCR扩增4)反链切除5)DNA链3'封闭参考资料:1flowcell为何要先介绍flowcell?因为簇</div>
                    </li>
                    <li><a href="/article/1943950163496202240.htm"
                           title="JavaScript 基础09:Web APIs——日期对象、DOM节点" target="_blank">JavaScript 基础09:Web APIs——日期对象、DOM节点</a>
                        <span class="text-muted">梦想当全栈</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>JavaScript基础09:WebAPIs——日期对象、DOM节点进一步学习DOM相关知识,实现可交互的网页特效能够插入、删除和替换元素节点。能够依据元素节点关系查找节点。一、日期对象掌握Date日期对象的使用,动态获取当前计算机的时间。ECMAScript中内置了获取系统时间的对象Date,使用Date时与之前学习的内置对象console和Math不同,它需要借助new关键字才能使用。1.实例</div>
                    </li>
                    <li><a href="/article/1943946255763828736.htm"
                           title="《Java前端开发全栈指南:从Servlet到现代框架实战》" target="_blank">《Java前端开发全栈指南:从Servlet到现代框架实战》</a>
                        <span class="text-muted"></span>

                        <div>前言在当今Web开发领域,Java依然是后端开发的主力语言,而随着前后端分离架构的普及,Java开发者也需要掌握前端技术栈。本文将全面介绍JavaWeb前端开发的核心技术,包括传统Servlet/JSP体系、现代前端框架集成方案,以及全栈开发的最佳实践。通过本文,您将了解如何构建现代化的JavaWeb应用前端界面。一、JavaWeb前端技术演进1.1传统技术栈Servlet:JavaWeb基础,处</div>
                    </li>
                    <li><a href="/article/1943943735733710848.htm"
                           title="javaSE面试题---语法基础、面向对象、常用类、集合、多线程、文件和IO" target="_blank">javaSE面试题---语法基础、面向对象、常用类、集合、多线程、文件和IO</a>
                        <span class="text-muted">yang_xiao_wu_</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/javase/1.htm">javase</a><a class="tag" taget="_blank" href="/search/java%E5%9F%BA%E7%A1%80/1.htm">java基础</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E5%92%8CIO/1.htm">文件和IO</a>
                        <div>目录语法基础1.jdkjrejvm区别2.基本数据类型3.引用数据类型4.自动类型转换、强制类型转换5.常见的运算符6.&和&&区别7.++--在前和在后的区别8.+=有什么作用9.switch..case中switch支持哪些数据类型10.break和continue区别11.while和dowhile区别12.如何生成一个取值范围在[min,max]之间的随机数13.数组的长度如何获取?数组下</div>
                    </li>
                                <li><a href="/article/54.htm"
                                       title="JAVA中的Enum" target="_blank">JAVA中的Enum</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE/1.htm">枚举</a>
                                    <div>Enum是计算机编程语言中的一种数据类型---枚举类型。 在实际问题中,有些变量的取值被限定在一个有限的范围内。       例如,一个星期内只有七天 我们通常这样实现上面的定义: 
public String monday;
public String tuesday;
public String wensday;
public String thursday</div>
                                </li>
                                <li><a href="/article/181.htm"
                                       title="赶集网mysql开发36条军规" target="_blank">赶集网mysql开发36条军规</a>
                                    <span class="text-muted">Bill_chen</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E4%B8%9A%E5%8A%A1%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">业务架构设计</a><a class="tag" taget="_blank" href="/search/mysql%E8%B0%83%E4%BC%98/1.htm">mysql调优</a><a class="tag" taget="_blank" href="/search/mysql%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">mysql性能优化</a>
                                    <div>(一)核心军规   (1)不在数据库做运算      cpu计算务必移至业务层;   (2)控制单表数据量      int型不超过1000w,含char则不超过500w;      合理分表;      限制单库表数量在300以内;   (3)控制列数量      字段少而精,字段数建议在20以内</div>
                                </li>
                                <li><a href="/article/308.htm"
                                       title="Shell test命令" target="_blank">Shell test命令</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">字符串</a><a class="tag" taget="_blank" href="/search/test/1.htm">test</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%97/1.htm">数字</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E6%AF%94%E8%BE%83/1.htm">文件比较</a>
                                    <div>Shell test命令 
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。  数值测试    参数 说明   -eq 等于则为真   -ne 不等于则为真   -gt 大于则为真   -ge 大于等于则为真   -lt 小于则为真   -le 小于等于则为真    
实例演示: 
num1=100
num2=100if test $[num1]</div>
                                </li>
                                <li><a href="/article/435.htm"
                                       title="XFire框架实现WebService(二)" target="_blank">XFire框架实现WebService(二)</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a>
                                    <div>   有了XFire框架实现WebService(一),就可以继续开发WebService的简单应用。 
Webservice的服务端(WEB工程): 
两个java bean类: 
Course.java 
   package cn.com.bean; 
public class Course { 
    private </div>
                                </li>
                                <li><a href="/article/562.htm"
                                       title="重绘之画图板" target="_blank">重绘之画图板</a>
                                    <span class="text-muted">朱辉辉33</span>
<a class="tag" taget="_blank" href="/search/%E7%94%BB%E5%9B%BE%E6%9D%BF/1.htm">画图板</a>
                                    <div>       上次博客讲的五子棋重绘比较简单,因为只要在重写系统重绘方法paint()时加入棋盘和棋子的绘制。这次我想说说画图板的重绘。 
       画图板重绘难在需要重绘的类型很多,比如说里面有矩形,园,直线之类的,所以我们要想办法将里面的图形加入一个队列中,这样在重绘时就</div>
                                </li>
                                <li><a href="/article/689.htm"
                                       title="Java的IO流" target="_blank">Java的IO流</a>
                                    <span class="text-muted">西蜀石兰</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>刚学Java的IO流时,被各种inputStream流弄的很迷糊,看老罗视频时说想象成插在文件上的一根管道,当初听时觉得自己很明白,可到自己用时,有不知道怎么代码了。。。 
每当遇到这种问题时,我习惯性的从头开始理逻辑,会问自己一些很简单的问题,把这些简单的问题想明白了,再看代码时才不会迷糊。 
 
IO流作用是什么? 
答:实现对文件的读写,这里的文件是广义的; 
 
Java如何实现程序到文件</div>
                                </li>
                                <li><a href="/article/816.htm"
                                       title="No matching PlatformTransactionManager bean found for qualifier 'add' - neither" target="_blank">No matching PlatformTransactionManager bean found for qualifier 'add' - neither</a>
                                    <span class="text-muted">林鹤霄</span>

                                    <div>java.lang.IllegalStateException: No matching PlatformTransactionManager bean found for qualifier 'add' - neither qualifier match nor bean name match! 
  
网上找了好多的资料没能解决,后来发现:项目中使用的是xml配置的方式配置事务,但是</div>
                                </li>
                                <li><a href="/article/943.htm"
                                       title="Row size too large (> 8126). Changing some columns to TEXT or BLOB" target="_blank">Row size too large (> 8126). Changing some columns to TEXT or BLOB</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/column/1.htm">column</a>
                                    <div>原文:http://stackoverflow.com/questions/15585602/change-limit-for-mysql-row-size-too-large 
  
异常信息: 
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAM</div>
                                </li>
                                <li><a href="/article/1070.htm"
                                       title="JS 格式化时间" target="_blank">JS 格式化时间</a>
                                    <span class="text-muted">alxw4616</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>/**
 * 格式化时间 2013/6/13 by 半仙 alxw4616@msn.com
 * 需要 pad 函数
 * 接收可用的时间值.
 * 返回替换时间占位符后的字符串
 *
 * 时间占位符:年 Y 月 M 日 D 小时 h 分 m 秒 s 重复次数表示占位数
 * 如 YYYY 4占4位 YY 占2位<p></p>
 * MM DD hh mm</div>
                                </li>
                                <li><a href="/article/1197.htm"
                                       title="队列中数据的移除问题" target="_blank">队列中数据的移除问题</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E9%98%9F%E5%88%97%E7%A7%BB%E9%99%A4/1.htm">队列移除</a>
                                    <div>  
   队列的移除一般都是使用的remov();都可以移除的,但是在昨天做线程移除的时候出现了点问题,没有将遍历出来的全部移除,  代码如下; 
  
   // 
package com.Thread0715.com;

import java.util.ArrayList;

public class Threa</div>
                                </li>
                                <li><a href="/article/1324.htm"
                                       title="Runnable接口使用实例" target="_blank">Runnable接口使用实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/Runnable/1.htm">Runnable</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>Runnable接口 
a.       该接口只有一个方法:public void run(); 
b.       实现该接口的类必须覆盖该run方法 
c.       实现了Runnable接口的类并不具有任何天</div>
                                </li>
                                <li><a href="/article/1451.htm"
                                       title="oracle里的extend详解" target="_blank">oracle里的extend详解</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/extend/1.htm">extend</a>
                                    <div>扩展已知的数组空间,例: 
DECLARE
  TYPE CourseList IS TABLE OF VARCHAR2(10);
  courses CourseList;
BEGIN
  --   初始化数组元素,大小为3
  courses := CourseList('Biol   4412 ', 'Psyc   3112 ', 'Anth   3001 ');
  --   </div>
                                </li>
                                <li><a href="/article/1578.htm"
                                       title="【httpclient】httpclient发送表单POST请求" target="_blank">【httpclient】httpclient发送表单POST请求</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a>
                                    <div>浏览器Form Post请求 
浏览器可以通过提交表单的方式向服务器发起POST请求,这种形式的POST请求不同于一般的POST请求 
1. 一般的POST请求,将请求数据放置于请求体中,服务器端以二进制流的方式读取数据,HttpServletRequest.getInputStream()。这种方式的请求可以处理任意数据形式的POST请求,比如请求数据是字符串或者是二进制数据 
2. Form </div>
                                </li>
                                <li><a href="/article/1705.htm"
                                       title="【Hive十三】Hive读写Avro格式的数据" target="_blank">【Hive十三】Hive读写Avro格式的数据</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a>
                                    <div> 1. 原始数据 
hive> select * from word; 
OK
1	MSN  
10	QQ  
100	Gtalk  
1000	Skype  
  
  
 2. 创建avro格式的数据表 
  
hive> CREATE TABLE avro_table(age INT, name STRING)STORE</div>
                                </li>
                                <li><a href="/article/1832.htm"
                                       title="nginx+lua+redis自动识别封解禁频繁访问IP" target="_blank">nginx+lua+redis自动识别封解禁频繁访问IP</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>在站点遇到攻击且无明显攻击特征,造成站点访问慢,nginx不断返回502等错误时,可利用nginx+lua+redis实现在指定的时间段 内,若单IP的请求量达到指定的数量后对该IP进行封禁,nginx返回403禁止访问。利用redis的expire命令设置封禁IP的过期时间达到在 指定的封禁时间后实行自动解封的目的。 
一、安装环境: 
 
 CentOS x64 release 6.4(Fin</div>
                                </li>
                                <li><a href="/article/1959.htm"
                                       title="java-二叉树的遍历-先序、中序、后序(递归和非递归)、层次遍历" target="_blank">java-二叉树的遍历-先序、中序、后序(递归和非递归)、层次遍历</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;


public class BinTreeTraverse {
	//private int[] array={ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	private int[] array={ 10,6,</div>
                                </li>
                                <li><a href="/article/2086.htm"
                                       title="Spring源码学习-XML 配置方式的IoC容器启动过程分析" target="_blank">Spring源码学习-XML 配置方式的IoC容器启动过程分析</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a>
                                    <div>以FileSystemXmlApplicationContext为例,把Spring IoC容器的初始化流程走一遍: 
 

ApplicationContext context = new FileSystemXmlApplicationContext
            ("C:/Users/ZARA/workspace/HelloSpring/src/Beans.xml&q</div>
                                </li>
                                <li><a href="/article/2213.htm"
                                       title="[科研与项目]民营企业请慎重参与军事科技工程" target="_blank">[科研与项目]民营企业请慎重参与军事科技工程</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A/1.htm">企业</a>
                                    <div> 
 
     军事科研工程和项目 并非要用最先进,最时髦的技术,而是要做到“万无一失” 
 
   而民营科技企业在搞科技创新工程的时候,往往考虑的是技术的先进性,而对先进技术带来的风险考虑得不够,在今天提倡军民融合发展的大环境下,这种“万无一失”和“时髦性”的矛盾会日益凸显。。。。。。所以请大家在参与任何重大的军事和政府项目之前,对</div>
                                </li>
                                <li><a href="/article/2340.htm"
                                       title="spring 定时器-两种方式" target="_blank">spring 定时器-两种方式</a>
                                    <span class="text-muted">cuityang</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E5%99%A8/1.htm">定时器</a>
                                    <div>方式一: 
间隔一定时间 运行 
 
<bean id="updateSessionIdTask" class="com.yang.iprms.common.UpdateSessionTask" autowire="byName" /> 
 
 <bean id="updateSessionIdSchedule</div>
                                </li>
                                <li><a href="/article/2467.htm"
                                       title="简述一下关于BroadView站点的相关设计" target="_blank">简述一下关于BroadView站点的相关设计</a>
                                    <span class="text-muted">damoqiongqiu</span>
<a class="tag" taget="_blank" href="/search/view/1.htm">view</a>
                                    <div>终于弄上线了,累趴,戳这里http://www.broadview.com.cn 
  
简述一下相关的技术点 
  
前端:jQuery+BootStrap3.2+HandleBars,全站Ajax(貌似对SEO的影响很大啊!怎么破?),用Grunt对全部JS做了压缩处理,对部分JS和CSS做了合并(模块间存在很多依赖,全部合并比较繁琐,待完善)。 
  
后端:U</div>
                                </li>
                                <li><a href="/article/2594.htm"
                                       title="运维 PHP问题汇总" target="_blank">运维 PHP问题汇总</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/windows2003/1.htm">windows2003</a>
                                    <div>1、Dede(织梦)发表文章时,内容自动添加关键字显示空白页 
解决方法: 
后台>系统>系统基本参数>核心设置>关键字替换(是/否),这里选择“是”。 
后台>系统>系统基本参数>其他选项>自动提取关键字,这里选择“是”。 
  
2、解决PHP168超级管理员上传图片提示你的空间不足 
网站是用PHP168做的,反映使用管理员在后台无法</div>
                                </li>
                                <li><a href="/article/2721.htm"
                                       title="mac 下 安装php扩展 - mcrypt" target="_blank">mac 下 安装php扩展 - mcrypt</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin依赖这个PHP扩展,具体如下: 
 
  
  下载并解压libmcrypt-2.5.8.tar.gz。 
  在终端执行如下命令:  tar zxvf libmcrypt-2.5.8.tar.gz cd libmcrypt-2.5.8/ ./configure --disable-posix-threads --</div>
                                </li>
                                <li><a href="/article/2848.htm"
                                       title="MongoDB更新文档 [四]" target="_blank">MongoDB更新文档 [四]</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/Mongodb%E6%9B%B4%E6%96%B0%E6%96%87%E6%A1%A3/1.htm">Mongodb更新文档</a>
                                    <div>MongoDB更新文档 
转载请出自出处:http://eksliang.iteye.com/blog/2174104 
MongoDB对文档的CURD,前面的博客简单介绍了,但是对文档更新篇幅比较大,所以这里单独拿出来。 
语法结构如下: 
db.collection.update( criteria, objNew, upsert, multi) 
参数含义    参数   </div>
                                </li>
                                <li><a href="/article/2975.htm"
                                       title="Linux下的解压,移除,复制,查看tomcat命令" target="_blank">Linux下的解压,移除,复制,查看tomcat命令</a>
                                    <span class="text-muted">y806839048</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                                    <div>重复myeclipse生成webservice有问题删除以前的,干净 
 
 1、先切换到:cd usr/local/tomcat5/logs 
 
2、tail -f catalina.out 
 
3、这样运行时就可以实时查看运行日志了 
 
 
 
 
Ctrl+c 是退出tail命令。 
 有问题不明的先注掉 
   cp /opt/tomcat-6.0.44/webapps/g</div>
                                </li>
                                <li><a href="/article/3102.htm"
                                       title="Spring之使用事务缘由(3-XML实现)" target="_blank">Spring之使用事务缘由(3-XML实现)</a>
                                    <span class="text-muted">ihuning</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>  
用事务通知声明式地管理事务 
  
事务管理是一种横切关注点。为了在 Spring 2.x 中启用声明式事务管理,可以通过 tx Schema 中定义的 <tx:advice> 元素声明事务通知,为此必须事先将这个 Schema 定义添加到 <beans> 根元素中去。声明了事务通知后,就需要将它与切入点关联起来。由于事务通知是在 <aop:</div>
                                </li>
                                <li><a href="/article/3229.htm"
                                       title="GCD使用经验与技巧浅谈" target="_blank">GCD使用经验与技巧浅谈</a>
                                    <span class="text-muted">啸笑天</span>
<a class="tag" taget="_blank" href="/search/GC/1.htm">GC</a>
                                    <div>前言 
GCD(Grand Central Dispatch)可以说是Mac、iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧。 
dispatch_once_t必须是全局或static变量 
这一条算是“老生常谈”了,但我认为还是有必要强调一次,毕竟非全局或非static的dispatch_once_t变量在使用时会导致非常不好排查的bug,正确的如下:        1  </div>
                                </li>
                                <li><a href="/article/3356.htm"
                                       title="linux(Ubuntu)下常用命令备忘录1" target="_blank">linux(Ubuntu)下常用命令备忘录1</a>
                                    <span class="text-muted">macroli</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                                    <div>在使用下面的命令是可以通过--help来获取更多的信息1,查询当前目录文件列表:ls 
 
 ls命令默认状态下将按首字母升序列出你当前文件夹下面的所有内容,但这样直接运行所得到的信息也是比较少的,通常它可以结合以下这些参数运行以查询更多的信息:  
 ls / 显示/.下的所有文件和目录  
 ls -l 给出文件或者文件夹的详细信息 
 ls -a 显示所有文件,包括隐藏文</div>
                                </li>
                                <li><a href="/article/3483.htm"
                                       title="nodejs同步操作mysql" target="_blank">nodejs同步操作mysql</a>
                                    <span class="text-muted">qiaolevip</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a>
                                    <div>// db-util.js
var mysql = require('mysql');
var pool = mysql.createPool({
  connectionLimit : 10,
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'test',
  port: 3306
});

</div>
                                </li>
                                <li><a href="/article/3610.htm"
                                       title="一起学Hive系列文章" target="_blank">一起学Hive系列文章</a>
                                    <span class="text-muted">superlxw1234</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/Hive%E5%85%A5%E9%97%A8/1.htm">Hive入门</a>
                                    <div>  
[一起学Hive]系列文章 目录贴,入门Hive,持续更新中。 
  
[一起学Hive]之一—Hive概述,Hive是什么 
[一起学Hive]之二—Hive函数大全-完整版 
[一起学Hive]之三—Hive中的数据库(Database)和表(Table) 
[一起学Hive]之四-Hive的安装配置 
[一起学Hive]之五-Hive的视图和分区 
[一起学Hive</div>
                                </li>
                                <li><a href="/article/3737.htm"
                                       title="Spring开发利器:Spring Tool Suite 3.7.0 发布" target="_blank">Spring开发利器:Spring Tool Suite 3.7.0 发布</a>
                                    <span class="text-muted">wiselyman</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>Spring Tool Suite(简称STS)是基于Eclipse,专门针对Spring开发者提供大量的便捷功能的优秀开发工具。 
  
在3.7.0版本主要做了如下的更新: 
  
 
 将eclipse版本更新至Eclipse Mars 4.5 GA 
 Spring Boot(JavaEE开发的颠覆者集大成者,推荐大家学习)的配置语言YAML编辑器的支持(包含自动提示,</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>